Spring Actuator 的 "jvm.memory.max" 指标与 Runtime.getRuntime().maxMemory() 不匹配
Mismatch between Spring Actuator's "jvm.memory.max" metric and Runtime.getRuntime().maxMemory()
我正在试用 Spring Boot Actuator 并查看“/actuator/metrics/jvm.memory.max”端点。
我也是 运行 我的 Spring 启动应用程序,具有以下 JVM 选项:
-Xmx104m
我创建了一个端点(“/memory”,其中 returns 应用程序的总内存、可用内存、已用内存和最大内存。我为此使用了 Runtime.getRuntime().getXXX() 方法。
我的问题是值 Springboot 的 "jvm.memory.max" 以字节为单位向我显示的值与 -Xmx 值以及“/memory”端点向我显示的内容不匹配。
知道为什么会出现这种不匹配吗?
Spring Boot 使用 Micrometer 来支持指标。 jvm.memory.max
指标由 Mirometer 的 JvmMemoryMetrics class 使用 MemoryPoolMXBean.getUsage().getMax()
生成。
MemoyPoolMXBean
公开有关堆内存和非堆内存的信息,而 Micrometer 使用 jvm.memory.max
指标上的标签将这些信息分开。在问题中显示的输出中,该值是堆内存和非堆内存的组合,这就是为什么它与使用 -Xmx
.
配置的堆特定值不同的原因
您可以使用指标和查询参数深入了解指标。这在 Actuator 的 documentation. For example, to get the max heap memory, you would use http://localhost:9001/actuator/metrics/jvm.memory.max?tag=area:heap.
中有描述
我正在试用 Spring Boot Actuator 并查看“/actuator/metrics/jvm.memory.max”端点。
我也是 运行 我的 Spring 启动应用程序,具有以下 JVM 选项:
-Xmx104m
我创建了一个端点(“/memory”,其中 returns 应用程序的总内存、可用内存、已用内存和最大内存。我为此使用了 Runtime.getRuntime().getXXX() 方法。
我的问题是值 Springboot 的 "jvm.memory.max" 以字节为单位向我显示的值与 -Xmx 值以及“/memory”端点向我显示的内容不匹配。
知道为什么会出现这种不匹配吗?
Spring Boot 使用 Micrometer 来支持指标。 jvm.memory.max
指标由 Mirometer 的 JvmMemoryMetrics class 使用 MemoryPoolMXBean.getUsage().getMax()
生成。
MemoyPoolMXBean
公开有关堆内存和非堆内存的信息,而 Micrometer 使用 jvm.memory.max
指标上的标签将这些信息分开。在问题中显示的输出中,该值是堆内存和非堆内存的组合,这就是为什么它与使用 -Xmx
.
您可以使用指标和查询参数深入了解指标。这在 Actuator 的 documentation. For example, to get the max heap memory, you would use http://localhost:9001/actuator/metrics/jvm.memory.max?tag=area:heap.
中有描述