JDK17下JFR日志缺失Memory/TLAB Allocation信息的参数排查求助
JDK17 JFR日志缺失Memory/TLAB Allocation板块的排查分析
问题背景
使用MissionControl分析JDK17生成的JFR日志时,Memory/TLAB Allocation板块的信息完全缺失。当前使用的JDK17 JVM参数如下:
-XX:+UnlockDiagnosticVMOptions -X::+DebugNonSafepoints -XX:UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay....filename=... loglevel=info
对比JDK8的可用参数(可正常获取完整数据):
-XX:+UnlockDiagnosticVMOptions -X::+DebugNonSafepoints -XX:UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay....filename=... -XX:FlightRecorderOptions=loglevel=info
参数配置错误分析
你遇到的缺失问题确实和JDK17的参数配置错误有关,核心问题点:
loglevel=info的配置位置错误:
JDK17中-XX:StartFlightRecording的参数列表并不包含loglevel选项,直接把它写在该参数后面属于无效配置。而JDK8中是通过-XX:FlightRecorderOptions单独配置日志级别,这在JDK17中已被移除。- 废弃参数的使用:
根据JDK官方的JDK-8225312问题记录(已翻译内容):JDK-8225312:废弃
-XX:+FlightRecorder参数
在JDK17及后续版本中,Flight Recorder已成为JDK默认组件,无需通过-XX:+FlightRecorder手动启用。该参数已被标记为废弃,虽然当前指定它仍会触发Flight Recorder启动,但JVM会输出警告,且后续版本可能完全移除该参数支持。
修正后的JDK17参数配置
将参数调整为以下形式,重新录制JFR日志即可:
-XX:+UnlockDiagnosticVMOptions -X::+DebugNonSafepoints -XX:UnlockCommercialFeatures -XX:StartFlightRecording=delay....filename=... -Xlog:jfr=info
说明:
- 用
-Xlog:jfr=info替代原JDK8中的-XX:FlightRecorderOptions=loglevel=info,这是JDK17中配置JFR日志级别的正确方式。 - 可选但推荐移除废弃的
-XX:+FlightRecorder参数,调整后参数如下:
-XX:+UnlockDiagnosticVMOptions -X::+DebugNonSafepoints -XX:UnlockCommercialFeatures -XX:StartFlightRecording=delay....filename=... -Xlog:jfr=info
验证方法
修改参数后重启应用,重新录制JFR日志,再用MissionControl打开日志,检查Memory/TLAB Allocation板块的信息是否正常显示。
内容的提问来源于stack exchange,提问作者27P
相关产品推荐
相关产品推荐

