1

我正在使用 Elastic APM,并且想了解垃圾收集器在一段时间内运行了多长时间。这是为了了解应用程序是否内存不足,这似乎比仅检查使用的堆更准确,因为当堆空间有限时可能会触发垃圾收集,然后释放大量内存。

Elastic APM 将跟踪jvm.gc.time,Elastic 站点将其定义为:

近似累积收集经过的时间(以毫秒为单位)。资源

我假设这意味着自应用程序启动以来已经花费了多少时间进行垃圾收集。我的计划是定期读取这个值,并确定有多少时间间隔用于垃圾收集。

当我两次读取这个值时,结果是第二次,后来的读数实际上低于第一次。

初读

  • 2020 年3 月 23 日星期一14:27:40 CDT
  • jvm.gc.time= 2384

二读

  • 2020 年3 月 23 日星期一14:30 :41 CDT
  • jvm.gc.time= 2292

谁能帮我理解jvm.gc.time捕获了什么?

4

1 回答 1

2

这些指标直接来自java.lang.management.GarbageCollectorMXBean。度量的值jvm.gc.time取自GarbageCollectorMXBean.getCollectionTime,自过程开始以来确实在累积。

假设您正在查看来自单个 JVM 的指标,有几个可能的原因导致该值出现倒退:

  1. 该过程重新开始。
  2. 这些值适用于两个不同的 GC“内存管理器”(例如 G1 Young Generation、G1 Old Generation)

如果流程重新启动(我希望您无论如何都会知道),Elasticsearch 中的指标文档将具有不同的 field 值agent.ephemeral_id

更有可能的答案是您看到两个不同内存管理器/GC 代的值,在这种情况下,Elasticsearch 中的指标文档将具有不同的 field 值labels.name

在此处输入图像描述

于 2020-03-24T08:35:00.600 回答