java - 为什么读取千分尺测量值有时会返回 NaN?

标签 java spring-boot micrometer spring-micrometer

我正在尝试以编程方式读取仪表,如下所示:

获取注册表:

MeterRegistry registry = Metrics.globalRegistry.getRegistries().iterator().next();

读取测量值:

    double systemCpuUsage = registry.get("system.cpu.usage").gauge().measure().iterator().next().getValue();

问题是有时我得到 NaN

我在文档中读到过:Why is my Gauge reporting NaN or disappearing?

但我不确定我该怎么做。此外,我正在阅读 Spring Boot 执行器的“内置”仪表(由 management.metrics.enable.process.cpu.usage=true 公开),因此我无法更改其结构。

最佳答案

这是由于 Micrometer 在仪表中使用了“弱引用”。由于仪表不持有对对象的强引用,当对象被垃圾回收时,该值变为 NaN

如果您确实控制了仪表的创建,您会希望自己存储一个引用,或者在仪表上调用 strongReference(true)

如果您遇到内置的 Spring Boot 仪表,我相信您遇到了错误。这很奇怪,因为创建该仪表的 ProcessorMetrics 仪表绑定(bind)器拥有自己的引用(尽管它可以为 null)。

当您看到 NaN 时,您是否在不同的 JVM 或运行时环境中运行?

关于java - 为什么读取千分尺测量值有时会返回 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56889240/

相关文章:

java - 在 Ubuntu 中打开一个 .jar

spring-boot - Spring Boot 执行器 "system.cpu.usage"与 "process.cpu.usage"

范围向量中的普罗米修斯范围持续时间 w.r.t. Grafana 时间间隔

kotlin - 如何修复应用程序启动时未加载的 micronaut micrometer bean

不同端口上的spring boot 2.1.0管理服务器端口

java - 当我请求休息服务时,Jquery 不起作用(Spring Boot)

java - 从文本文件 :  读取的第一个字符

java - StdIn 不工作... @ Linux

java - Spring AOP 计算从另一个调用特定方法的次数

java - spring boot中两个实体之间的多对多关系