Java Flight Recorder - Live Objects 选项卡为空

Posted

技术标签:

【中文标题】Java Flight Recorder - Live Objects 选项卡为空【英文标题】:Java Flight Recorder - Live Objects Tab is empty 【发布时间】:2021-08-17 13:29:18 【问题描述】:

我正在运行 JDK 1.8_291 和 JDK Mission Control 8.0.0。

我正在尝试激活 Flight Recording 中的 Live Objects 选项卡, Live Objects tab is always empty

我关注过旧线程讨论相同的问题,例如:

    Java Flight Recorder - no Live Objects How to enable Object Types + Allocation Stack Traces + Path to GC Root in Java Mission Control

这些是我正在使用的命令:

-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】:

可以通过 path-to-gc-roots 配置的旧对象示例事件在 Oracle JDK 8 中不可用。它是在 Oracle JDK 10 中引入的,这是引用的 pdf 文件所涵盖的内容。

从 Oracle JDK 7u40 开始,存在两个 Object Count 事件,它遍历整个堆并计算每个类的对象数,没有采样。它在 JMC 8 的“实时对象”页面中没有显示,但在 JMC 5.5 中的“对象统计”选项卡中可用

【讨论】:

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

以上是关于Java Flight Recorder - Live Objects 选项卡为空的主要内容,如果未能解决你的问题,请参考以下文章

jdk11新特性——Java Flight Recorder

Java Flight Recorder - 查找文件描述符泄漏

内置 JFR(Java Flight Recorder)事件记录在哪里?

Java Flight Recorder - Live Objects 选项卡为空

如何在 Java Flight Recorder 采样中包含 IO 绑定方法?

Java Mission Control Flight Recorder 中没有记录 CPU 使用情况