springboot2.1.1 引入spring-actuator2.1.1 监控tomcat指标NaN问题:
github相关issue:
https://github.com/micrometer-metrics/micrometer/issues/1792
https://github.com/stagemonitor/stagemonitor/issues/441
springboot2.1.1引入spring-actuator2.1.1
tomcat监控指标返回NaN
源码NaN打印位置:
springboot2.1.1对应tomcat版本为9.0.13
tomcat版本:9.0.13
具备两个tomcat jmx监控类
源码:io.micrometer.core.instrument.binder.tomcat.TomcatMetrics
Set objectNames 会返回:
1:Tomcat:type=ThreadPool,name=“http-nio-tomcatPort”,subType=SocketProperties
2:Tomcat:type=ThreadPool,name="http-nio-tomcatPort
两个类,如果1在前会报错可能有问题 带有,subType=SocketProperties…的值如果在第一位tomcat指标加载不出来,可以通过修改服务tomcat端口号,会变更这个set值的顺序,可以得到正确的值
降低为9.0.12
tomcat只有一个tomcat监控类
只有一个值,能获取到 tomcat指标
问:为什么又得项目可以,有得项目不行?
测试发现部分项目可以加载出tomcat监控指标,部分项目不行,springboot和actuator版本一致。
代码对应的Set objectNames的顺序有个hashset存放名称
猜测是hash转换的Set,应该是可以通过修改名称,修改其在hash的位置让返回的Set名称中正确的tomcat居于第一位
修改端口后测试:
tomcat监控一样可以监控到,问题搞定。
总结
1:更换tomcat 9.0.13->9.0.12
2:修改tomcat端口,让正确的tomcat jmx监控类名称的hash转set的值放再第一位