为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2023-03-09 14:11:12
我正在尝试以编程方式读取仪表,如下所示:获取注册表: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),因此我无法更改其结构。
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这是由于千分尺在仪表中使用了“弱参考”。由于仪表没有对该对象的强引用,因此当对象被垃圾回收时,该值变为NaN.

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

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

当您看到NaN?


查看完整回答
反对 回复 2023-03-09
?
波斯汪

TA贡献1811条经验 获得超4个赞

在这种情况下,由于您使用的是“内置”指标,因此您可以重写 io.micrometer.core.instrument.binder.MeterBinder#bindTo,system.cpu.usage使用自定义 MeterBinder 实现重新定义,并将 system.cpu.usage 定义为(以及您使用的其他指标)


Gauge.builder("system.cpu.usage", operatingSystemBean, x -> invoke(systemCpuUsage))

.strongReference(true)//Add strong reference

.tags(tags)

.description("The recent cpu usage for the whole system")

.register(registry);

请参考io.micrometer.core.instrument.binder.system.ProcessorMetrics目前定义它的示例。


ProcessorMetrics 上的 bean 在中定义org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration,您也需要在某处定义您的 bean。(或标记@Component)


如果您不想依赖一些预定义的千分尺指标,比如捕获一些自定义列表大小,这就是您可以做的。


private static Map<String, Long> strongRefGauge = new ConcurrentHashMap<>();

要添加值,请执行以下操作


registry.gauge("CustomListSizeGuage", getMyCustomGuageTagsFor("myListName"), strongRefGauge, g -> g.get("myListName")).put("myListName", list.size());

查看完整回答
反对 回复 2023-03-09
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

只想提一下可能导致千分尺报告 NaN 的另一个原因。它实际上是一种默认行为,当值函数本身抛出异常时: https://github.com/micrometer-metrics/micrometer/blob/1.8.x/micrometer-core/src/main/java/io/micrometer /核心/仪器/内部/DefaultGauge.java#L57

此异常直接在仪表本身中捕获,并且可能会记录在 WARN 或可能只是 DEBUG lvl 中,不确定,由于某种原因在我们的应用程序中无法正常工作。

所以还有一个值得检查的可能原因:)


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信