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

JDK1.8下JFR的Live Objects Tab为空,path-to-gc-roots参数未知求替代方案

问题原因

JDK 8 版本的 JFR 不支持在-XX:StartFlightRecording启动参数中直接传入path-to-gc-roots=true配置,该参数是 JDK 9 及更高版本才新增的命令行参数,所以你添加后会触发未知参数报错。Live Objects标签无数据的核心原因是未正确开启老对象样本和GC根路径采集配置。

可行解决方案

第一步:修复启动参数报错

先删除启动参数里的path-to-gc-roots=true字段,原有启动参数修改为:

-ea -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=0s,filename=myrecording.jfr,settings=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/jre/lib/jfr/profile4.jfc,dumponexit=true

第二步:开启GC根路径和老对象采集配置,二选一即可

方式1:修改本地jfc配置文件

打开你用到的profile4.jfc配置文件,做如下调整:

  • 找到jdk.OldObjectSample事件配置段,修改为:
<event name="jdk.OldObjectSample">
  <setting name="enabled">true</setting>
  <setting name="stackTrace">true</setting>
  <setting name="pathToGcRoots">true</setting>
  <setting name="cutoff">infinite</setting>
</event>
  • 同时确认jdk.ObjectAllocationInNewTLAB和jdk.ObjectAllocationOutsideTLAB两个事件的enabled和stackTrace属性都设置为true,保证对象分配栈采集正常。

方式2:应用启动后通过jcmd命令启动录制

如果不想修改配置文件,可以把启动参数里的-XX:StartFlightRecording=...整段删除,仅保留基础JFR开启参数:

-ea -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

等应用启动完成后,执行以下命令启动录制:

# 先查询Java进程PID
jps
# 替换<PID>为你的应用进程ID,启动录制
jcmd <PID> JFR.start duration=0s filename=myrecording.jfr settings=profile path-to-gc-roots=true dumponexit=true

第三步:触发对象采集

录制过程中建议主动触发一次Full GC,保证老对象样本事件能正常采集存活对象数据:

jcmd <PID> GC.run

第四步:导出录制文件查看

停止录制后将生成的jfr文件导入JMC 8,即可正常查看Live Objects标签内容。


内容的提问来源于stack exchange,提问作者Tarek Hany

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:27:03