Spring Boot应用配置App Insights采集JMX指标时对象名查找失败
解决App Insights JMX指标追踪的GC对象名找不到问题
问题本质
错误提示Cannot find object name 'java.lang:type=GarbageCollector,name=PS MarkSweep',核心原因是你的JVM环境中不存在这个名称的GC收集器MBean。不同JDK版本、不同GC收集器(如Parallel、G1、ZGC等)对应的JMX对象名存在差异,PS MarkSweep是Parallel Old收集器的专属名称,仅在启用Parallel GC的JVM中存在。
解决步骤
1. 确认当前JVM实际存在的GC收集器JMX对象名
用以下任意一种方式查看:
- jconsole可视化工具:
运行jconsole命令,连接到你的Spring Boot应用进程,切换到MBean标签,展开java.lang→GarbageCollector,查看右侧面板的ObjectName字段,记录实际存在的GC收集器名称。 - jcmd命令行工具:
先通过jps命令获取应用进程PID,再执行:
命令会输出所有GC相关的JMX对象名,例如:jcmd <你的应用PID> MBean.query java.lang:type=GarbageCollectorjava.lang:type=GarbageCollector,name=G1 Old Generation java.lang:type=GarbageCollector,name=G1 Young Generation
2. 修改applicationinsights.json配置
将配置中jmxMetrics里的GC相关objectName替换为你实际查到的名称。
示例(假设使用G1GC):
"jmxMetrics":[ { "name":"TEMP - GC Thread Count", "objectName":"java.lang:type=GarbageCollector,name=G1 Old Generation", "attribute":"LastGcInfo.GcThreadCount" }, { "name":"TEMP - GC Collection Count", "objectName":"java.lang:type=GarbageCollector,name=G1 Old Generation", "attribute":"CollectionCount" }, { "name":"TEMP - Thread Count", "objectName":"java.lang:type=Threading", "attribute":"ThreadCount" } ]
3. 验证属性可用性
部分GC收集器可能不支持LastGcInfo.GcThreadCount属性,如果修改后仍报错,可以尝试移除该指标,或替换为GC收集器支持的其他属性(可通过jconsole查看MBean的属性列表确认)。
内容的提问来源于stack exchange,提问作者hell_storm2004
相关产品推荐
相关产品推荐

