Java Flight Recorder - Live Objects选项卡为空。

4
我正在运行JDK 1.8_291和JDK任务控制8.0.0。
我试图在Flight Recording中激活Live Objects选项卡,但是Live Objects选项卡总是为空
我遵循了类似的旧线程讨论同样的问题:
  1. Java Flight Recorder - no Live Objects
  2. 如何在Java Mission Control中启用Object Types + Allocation Stack Traces + Path to GC Root
这些是我使用的命令:
-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,path-to-gc-roots=true,dumponexit=true

问题在于我收到了一个错误,提示“path-to-gc-roots”是一个未知的参数。
java.lang.IllegalArgumentException: Unknown argument 'path-to-gc-roots' in diagnostic command.Error occurred during initialization of VM

这是我正在使用的设置文件:https://pastebin.com/rH5vuVvS 我注意到JFR官方文档目前没有包含参数"path-to-gc-roots"。但在早期文档中,像这样的文档中它是存在的:https://docs.oracle.com/javacomponents/jmc-5-5/jfr-command-reference/JFRCR.pdf 我想知道是否有替代方法来激活Live Objects选项卡,因为这种方式可能已经过时了。
1个回答

4

Oracle JDK 8中不支持可以通过路径到GC根的配置来配置的旧对象示例事件。该事件是在引入Oracle JDK 10时引入的,所引用的pdf文件也是介绍Oracle JDK 10的。

自Oracle JDK 7u40以来,存在两个对象计数事件,它们遍历整个堆并计算每个类的对象数量,而不是采样。它在JMC 8 '现有对象'页面中没有可视化,但在JMC 5.5中的名为'对象统计'的选项卡中可用。

enter image description here


谢谢您的回复。我认为JMC 5.5中的“对象统计”选项卡与JMC 8中的“内存”选项卡是相同的,它们基本上计算每个类创建的对象数量和所占用的内存量,这是正确的吗? - Tarek Hany
我需要监控对象的时间信息,从它们创建开始直到GC收集它们。有没有任何方法可以实现这一点? 我认为可以通过Live Objects选项卡来实现。但是根据您的理解,使用JDK 8无法获取此信息。 - Tarek Hany
旧的对象示例事件不计算对象。它主要用于通过记录分配的时间戳和堆栈跟踪来查找内存泄漏。也就是说,采样应该能够在堆上给出统计正确的活动对象图像。使用Oracle JDK 8无法获取对象的生命周期。 - Kire Haglin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接