Prometheus,如何获取实际的 Java 垃圾收集器内存使用情况?

Prometheus, how to get the actual Java Garbage Collector memory usage?

Springboot 应用程序中的 Prometheus 插件正在发送大量数据,我没有发现任何关于我从导出器获得的含义的亮点:

1) What does "jvm_gc_memory_allocated_bytes_total" mean?
2) What does "jvm_gc_memory_promoted_bytes_total" mean?

我需要的是 Java 垃圾收集器的实际内存使用情况,因此我期望一个值始终低于 2GB(最大内存大小),但目前是 8GB 并且还在增加。

"jvm_gc_memory_allocated_bytes_total"

"jvm_gc_memory_promoted_bytes_total"

是导出器提供的仅有的两个 Garbe Collector 相关变量。

为了回答您的问题,每个公开的指标都以 Prometheus 说明格式提供了帮助文本:

# HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next

# HELP jvm_gc_memory_promoted_bytes_total Count of positive increases in the size of the old generation memory pool before GC to after GC

这些指标累积年轻代中分配的字节和垃圾收集后幸存下来的提升字节,因此它们被提升到老年代。 (非常简化)

根据您的问题,我认为您实际上并不是在寻找 "memory usage of the Java Garbage Collector",而是在寻找 JVM 的托管内存使用情况。这些托管片段在第一层分为 "heap" 和 "non-heap"(area 标签),可以通过 id 标签进一步向下钻取。

以下是您可能正在寻找的指标:

jvm_memory_used_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}
jvm_memory_committed_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}
jvm_memory_max_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}

因此,如果您想了解当前使用的堆,您需要将堆面积指标与以下 PromQL 相加:

sum(jvm_memory_used_bytes{job="myjob", instance="myhost", area="heap"})