Java 弹簧启动执行器指标mem和mem.free

Java 弹簧启动执行器指标mem和mem.free,java,spring-boot,Java,Spring Boot,在通过/metrics端点公开的Spring引导度量中mem和mem.free的含义是什么 我们正在对部署在三个节点上的新Spring Boot微服务进行负载测试,mem在虚拟机的4G总容量中,每个盒子的容量总是在250M左右,mem.free在不现实的负载下,比如100倍的正常负载可以下降到15M,并在测试后缓慢恢复 它们不是堆内存,因为Spring引导指标单独报告它们,它们不是Java进程本身,因为从命令行我可以看到,无论负载有多大,它都保持在4G的16%,即大约900MB。以下是/metr

在通过/metrics端点公开的Spring引导度量中memmem.free的含义是什么

我们正在对部署在三个节点上的新Spring Boot微服务进行负载测试,mem在虚拟机的4G总容量中,每个盒子的容量总是在250M左右,mem.free在不现实的负载下,比如100倍的正常负载可以下降到15M,并在测试后缓慢恢复

它们不是堆内存,因为Spring引导指标单独报告它们,它们不是Java进程本身,因为从命令行我可以看到,无论负载有多大,它都保持在4G的16%,即大约900MB。以下是/metrics呼叫响应片段:

{
    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,
。。。。 }

Grafanamem.free过去24小时的屏幕截图,最低点是在高负载测试期间(15MB!)

Grafana的cpu和内存使用情况报告如下所示,它告诉我cpu在这段时间内压力不足,这是可以理解的。但是Java进程内存(只有一个Spring启动在该框中运行)是稳定的:


那么在Spring Boot metrics中memmem.free的含义又是什么呢?

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

  • 来自的
    getUsed()
    的值

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


要了解更多详细信息,请查看Spring Boot的课程。

谢谢。这是非常清楚的解释。现在我可以看到mem(227657)=mem.free(44280)+heap.used(89351)+nonheap.used(94025)我还可以在这些框中找到默认的JVM InitialHeapSize=31457280,它非常小,甚至不足以容纳类(94025000)。当我设置-Xms=256m时,mem变成321136,mem.free增加到169665,这很好。需要添加的是(与JVM相反),执行器以KB而不是字节报告这些数字: