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

时间:2019-02-08 11:52:18

标签: 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

1 个答案:

答案 0 :(得分:2)

Spring Boot使用Micrometer来提供指标支持。 addTask = e => { this.setState(prevState => { return { tasks: [...prevState.tasks, this.state.newTask]}; }); }; 指标是Mirometer的JvmMemoryMetrics class使用jvm.memory.max产生的。

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

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