You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:06:11