Spring Actuator 的“jvm.memory.max”指标与 Runtime.getRuntime().maxMemory() 不匹配

vks*_*ghh 5 jvm heap-memory spring-boot spring-boot-actuator micrometer

我正在尝试 Spring Boot Actuator 并查看“/actuator/metrics/jvm.memory.max”端点。

我还使用以下 JVM 选项运行我的 Springboot 应用程序:

-Xmx104m

我创建了一个端点(“/memory”,它返回应用程序的 Total、Free、Used 和 Max memory。为此我使用了 Runtime.getRuntime().getXXX() 方法。

我的问题是 Springboot 的“jvm.memory.max”以字节为单位显示的值与 -Xmx 值以及“/memory”端点显示的值不匹配。

任何想法为什么这种不匹配?

在此处输入图片说明

在此处输入图片说明

And*_*son 11

Spring Boot 使用 Micrometer 作为其指标支持。的jvm.memory.max指标是由Mirometer的产生JvmMemoryMetrics类使用MemoryPoolMXBean.getUsage().getMax()

MemoyPoolMXBean约两个堆和非堆内存和千自曝信息分离的这些使用标签jvm.memory.max的度量。在问题中显示的输出中,该值是堆和非堆内存的组合,这就是为什么它与使用-Xmx.

您可以使用其标签和查询参数深入了解指标。这在执行器的文档中有所描述。例如,要获得最大堆内存,您可以使用http://localhost:9001/actuator/metrics/jvm.memory.max?tag=area:heap