【问题标题】:Prometheus, how to get the actual Java Garbage Collector memory usage?Prometheus,如何获取实际的 Java Garbage Collector 内存使用情况?
【发布时间】:2019-01-23 10:22:54
【问题描述】:

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 收集器相关的变量。

【问题讨论】:

    标签: spring-boot prometheus micrometer


    【解决方案1】:

    为了回答您的问题,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

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

    根据您的问题,我认为您实际上不是在寻找“Java 垃圾收集器的内存使用情况”,而是实际上在寻找 JVM 的托管内存使用情况。这些托管片段在第一层分为“堆”和“非堆”(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"})
    

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2014-07-10
      • 2021-05-09
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2021-07-01
      • 2015-11-06
      相关资源
      最近更新 更多