Prometheus,如何获取实际的Java Garbage Collector内存使用情况?

时间:2019-01-23 10:22:54

标签: spring-boot prometheus micrometer

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

OpaqueBytes issueRef=OpaqueBytes.of(new byte[1]);
        CashIssueFlow.IssueRequest issueRequest = new 
CashIssueFlow.IssueRequest(businessContractAmount, issueRef, notary);
            subFlow(new CashIssueFlow(issueRequest));

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

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

"jvm_gc_memory_allocated_bytes_total"

是导出器传递的仅有的两个与Garbe Collector相关的变量。

1 个答案:

答案 0 :(得分:0)

为回答您的问题,每个暴露指标均以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"})