Spring Boot Actuator指标mem和mem.free

Mic*_*lYu 8 java spring-boot

通过/ metrics endpoint 暴露的Spring Boot指标中memmem.free的含义是什么?

我们正在负载测试一个部署在三个节点中的新的Spring Boot微服务,每个盒子的mem总共大约在VM中的4G总共250M,mem.free在不正常的负载下如100倍的正常负载可以下降到15M并且在之后慢慢恢复考试.

它们不是堆内存,因为Spring Boot Metrics分别报告它们并且它们本身不是Java进程本身,因为从命令行我可以看到无论负载有多大,它都保持在4G的16%,即大约900MB.这是/ metrics call response snippet:

{
    mem: 227657,
    mem.free: 44280,
    processors: 2,
    instance.uptime: 80393579,
    uptime: 80414405,
    systemload.average: 0.03,
    heap.committed: 133632,
    heap.init: 61440,
    heap.used: 89351,
    heap: 872448,
    nonheap.committed: 96688,
    nonheap.init: 2496,
    nonheap.used: 94025,
    nonheap: 0,
    threads.peak: 109,
    threads.daemon: 34,
    threads.totalStarted: 183,
    threads: 63,
    classes: 10079,
    classes.loaded: 10155,
    classes.unloaded: 76,
Run Code Online (Sandbox Code Playgroud)

....}

Grafana mem.free截图最近24小时,最低点是重载测试期间(15MB!) 在此输入图像描述

下面显示了Grafana cpu和内存使用情况报告,它告诉我在这段时间内处于压力之下的CPU是可以理解的.但是Java进程内存(在该框中只运行1个Spring引导)是稳定的: 在此输入图像描述

那么在Spring Boot指标中memmem.free的意义又是什么呢?

And*_*son 17

mem是JVM当前使用的内存总量.它是两个值的总和:

mem.free是JVM可用的内存量.这是一个单一的价值:

要查看更多详细信息,请查看Spring Boot的SystemPublicMetrics课程.

  • 谢谢.这是非常明确的解释.现在我可以看到mem(227657)= mem.free(44280)+ heap.used(89351)+ nonheap.used(94025) (2认同)
  • 什么是必须补充的是,(违反JVM)执行机构在报告KB这些数字,而不是字节:https://github.com/spring-projects/spring-boot/blob/v1.5.6.RELEASE/spring-启动器/ src目录/主/ JAVA /组织/ springframework的的/ boot /开动/端点/ SystemPublicMetrics.java#L136 (2认同)