弹簧执行器公制"jvm.memory.used"的计量单位是什么?



我最近开始为一个预先存在的服务使用Spring Boot Actuator。我目前使用的是2.0.1.RELEASE版本。我已经成功地启动并运行了Spring Actuator,我可以看到/actuator/metrics页面启动并运行。我可以访问jvm.memory.used度量等度量,这些度量位于其相应的URL上,并带有用于向下搜索选项的各种标记。当我访问URLhttp://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?我假设答案只是字节。这是有道理的,但到目前为止,我找不到任何潜在的理由来支持这一点。

我试过用谷歌搜索,但没有用。我查阅了似乎是规范的Spring Actuator文档,但也找不到任何答案。我还发现了一个类似的SO问答;http.server.requests"总时间"度量上的A。该问题的公认答案表明,它取决于我的服务中的MeterRegistry实现。请注意,我没有这样的实现。我现在只是在玩网络API。此外,这个答案似乎是特定于时间单位的,而我并没有处理这个问题。如有任何帮助,我们将不胜感激。

好吧,我假设你在幕后使用千分尺。

千分尺是一个弹簧套2度量库。

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

现在,千分尺监视JVM并提供一些"开箱即用"的度量。在这里你可以找到关于它的信息。

它使用了一个称为"粘合剂"的概念,您对JvmMemoryMetrics感兴趣。让我们来看看这个活页夹的源代码。

注意以下代码:


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中获取信息,并构建一个以字节为单位显示信息的量表。

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

最新更新