spring-boot - Spring Actuator的 "jvm.memory.max"指标与Runtime.getRuntime()。maxMemory()不匹配

标签 spring-boot jvm heap-memory spring-boot-actuator micrometer

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

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

-Xmx104m

我创建了一个端点(“/memory”,它返回应用程序的总内存,可用内存,已用内存和最大内存。为此,我使用了Runtime.getRuntime()。getXXX()方法。

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

有什么想法为什么不匹配?

enter image description here

enter image description here

最佳答案

Spring Boot使用Micrometer来提供指标支持。 jvm.memory.max度量标准是Mirometer的JvmMemoryMetrics class使用MemoryPoolMXBean.getUsage().getMax()生成的。
MemoyPoolMXBean公开有关堆和非堆内存的信息,而Micrometer使用jvm.memory.max指标上的标签将它们分开。在问题显示的输出中,该值是堆内存和非堆内存的总和,这就是为什么它与使用-Xmx配置的特定于堆的值不同的原因。

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

关于spring-boot - Spring Actuator的 "jvm.memory.max"指标与Runtime.getRuntime()。maxMemory()不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591870/

相关文章:

java - Spring Boot 2.1.6 无法作为 SystemD 服务启动

java - 如何使用自定义属性初始化 SparkContext?

java - JVM getObjectSize 示例

java - 如何在 Spring 中返回字段的不同值

java - 在 Spring [Boot] 中手动解决依赖关系

java - java程序启动时会发生什么?

java - 为什么 Java 堆的最大大小是固定的?

c++替代实现以避免在RAM和SWAP内存之间切换

c++ - 混合在堆上和堆栈上创建的 vector 对象

eclipse - Spring Boot-Gradle-Eclipse项目