【问题标题】:Mismatch between Spring Actuator's "jvm.memory.max" metric and Runtime.getRuntime().maxMemory()Spring Actuator 的“jvm.memory.max”指标与 Runtime.getRuntime().maxMemory() 不匹配
【发布时间】:2019-07-02 15:55:45
【问题描述】:

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

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

-Xmx104m

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

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

有什么想法为什么会出现这种不匹配?

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 谢谢安迪!这解释了它,并感谢您分享相关的文档链接。
    猜你喜欢
    • 2012-12-08
    • 2019-03-29
    • 1970-01-01
    • 2019-02-08
    • 2021-06-16
    • 2021-04-23
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多