Elastic APM 中的 "jvm.gc.time" 到底是什么,如何使用?

What exactly is "jvm.gc.time" in Elastic APM, and how to use it?

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

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

The approximate accumulated collection elapsed time in milliseconds. Source

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

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

一读

二读

谁能帮我理解 jvm.gc.time 捕获的内容?

这些指标直接来自 java.lang.management.GarbageCollectorMXBeanjvm.gc.time 指标的值取自​​ GarbageCollectorMXBean.getCollectionTime,这确实是自流程开始以来累积的。

假设您正在查看来自单个 JVM 的指标,有几个可能的原因可以解释为什么值会倒退:

  1. 进程重新启动。
  2. 这些值是针对两个不同的 GC "memory managers"(例如 G1 年轻代,G1 老年代)

如果进程已重新启动(我希望您无论如何都会知道),Elasticsearch 中的指标文档的字段 agent.ephemeral_id.

将具有不同的值

更有可能的答案是,您看到的是两个不同内存 managers/GC 代的值,在这种情况下,Elasticsearch 中的指标文档对于字段 labels.name.