Spring Actuator Metric "jvm.memory.used" 是什么测量单位?

What unit of measurement is the Spring Actuator Metric "jvm.memory.used"?

我最近开始将 Spring Boot Actuator 用于现有服务。我目前使用的版本是 2.0.1.RELEASE。我已成功启动 Spring Actuator 和 运行,我可以看到 /actuator/metrics 页面和 运行 指标。我可以在其各自的 URL 访问 jvm.memory.used 等指标,并使用各种标签进行向下钻取选项。当我访问 URL http://localhost:8080/actuator/metrics/jvm.memory.used 时,我得到以下输出:

{"name":"jvm.memory.used","measurements":[{"statistic":"VALUE","value":7.71444944E8}],"availableTags":[{"tag":"area","values":["heap","nonheap"]},{"tag":"id","values":["Compressed Class Space","PS Survivor Space","PS Old Gen","Metaspace","PS Eden Space","Code Cache"]}]}

所以,我可以看到我使用的 JVM 内存是“7.71444944E8”(或者更简单地说就是“771444944”)。但是,我很好奇度量单位是什么,因为值本身是没有意义的。它只是字节吗?不过,它可能是 MB 还是 GB?我假设答案只是字节。这是有道理的,但到目前为止我找不到任何支持这一点的潜在理由。

我试过谷歌搜索,但无济于事。我咨询了似乎是 canonical Spring Actuator doc but I couldn't find any answers there, either. I also found 的内容。该问题的公认答案表明它取决于我服务中的 MeterRegistry 实施。请注意,我没有这样的实现。我现在只是在玩网络 API。此外,该答案似乎特定于我没有处理的时间单位。任何帮助将不胜感激。

好吧,我假设您正在使用千分尺。

Micrometer 是一个 spring boot 2 指标库。

即使您不使用任何存储来管理指标(如 Prometheus、DataDog 等),您仍然有一些默认注册表。

现在,Micrometer 监控 JVM 并提供一些 "out-of-the" 框指标。 Here您可以找到有关它的信息。

它使用了一个名为 "binders" 的概念,您对 JvmMemoryMetrics 感兴趣。 让我们来看看这个活页夹的source-code

注意以下代码:


            Gauge.builder("jvm.memory.used", memoryPoolBean, (mem) -> getUsageValue(mem, MemoryUsage::getUsed))
                .tags(tagsWithId)
                .description("The amount of used memory")
                .baseUnit(BaseUnits.BYTES)
                .register(registry);

它基本上从每个 java 进程可用的 JVM 内存的 JMX 中获取信息,并构建一个以字节为单位显示信息的仪表。

所以这是你的情况,它显示在执行器中。