JMC 9.1.0连接OpenJDK21触发JFR错误‘event is not allowed under control’求助
JMC 9.1.0连接OpenJDK 21启动Flight Recorder报错
event is not allowed under control的解决方案 问题场景
使用JDK Mission Control (JMC) 9.1.0连接本地Eclipse Temurin OpenJDK 21.0.2 JVM,双击侧边栏Flight Recorder启动录制时,触发错误提示:event is not allowed under control。相同操作在OpenJDK 11.0.18和17.0.6环境下可正常弹出配置窗口,仅JDK21环境下两个应用均出现该问题。
已尝试操作
- 开启/关闭JMX认证与SSL,无差异
- 使用代理模式,无差异
- 调整JMX权限配置,无差异
- 通过JMX操作
JFR.start可启动录制,但JMC UI无法触发 - 启动时初始化录制可正常运行
- 调整
jmxremote.local.only参数,无差异 - 开启JMC精细日志未获取有效排查信息
已定位错误源自JMC核心模块中XMLTagInstance.java的第90行。
解决方法
1. 升级JMC至兼容JDK21的版本
JMC 9.1.0发布时间较早,对JDK21的支持存在兼容性缺陷。建议升级到JMC 9.2.0及以上版本(如JMC 10.x系列),新版本针对JDK21的JFR配置解析逻辑做了修复,可解决UI触发录制时的权限校验问题。
2. 手动导入JDK21默认JFR配置文件
若暂时无法升级JMC,可通过以下步骤绕过UI限制:
- 从OpenJDK 21安装目录中复制默认配置文件
lib/jfr/default.jfc - 在JMC中右键目标JVM,选择Start Flight Recording,点击Load Configuration导入该文件,再启动录制
3. 调整JVM启动参数
JDK21对JFR的权限控制更严格,确保启动目标JVM时添加以下参数:
-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:FlightRecorderOptions=stackdepth=256 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
4. 确保JMC运行环境的JDK版本兼容
JMC本身需运行在兼容的JDK环境中,建议使用JDK17或JDK21启动JMC,避免因跨版本运行导致的配置解析异常。
内容的提问来源于stack exchange,提问作者Carson Black
相关产品推荐
相关产品推荐

