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 选项卡为空