我试图使用位于/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/jcmd(Mac OS X)中的jcmd二进制文件运行Java Flight Recorder。是否有命令行选项来启用与“开始飞行记录” UI上的“堆统计信息”选项相对应的堆指标:

java - 如何通过命令行为jfr启用堆指标-LMLPHP

最佳答案

没有命令行或jcmd选项来启用堆统计信息

该事件在默认文件和配置文件设置文件中均被禁用​​,因为它在遍历堆时会引发安全点。

但是,您可以在JMC,Windows->模板管理器中使用模板管理器。并检查所需的设置(即堆统计信息),然后导出文件。然后使用jcmd来应用它

jcmd <pid> JFR.start settings=my-configuration-file.jfc

如果您尝试诊断内存泄漏,那么可能会感兴趣的是,Oracle JDK 10+和OpenJDK 11+会记录Old Object Sample事件,该事件收集的信息通常对于解决Java内存泄漏更有用(并且没有安全点)高架)。更高版本的JDK具有选项path-to-gc-roots = true(对于jcmd和-XX:StartFlightRecording)都可以提供其他信息来解决内存泄漏。但是,该选项将产生与堆统计信息类似的开销,但是与HPROF转储相比,开销要小得多,因为将更少的数据写入磁盘。

10-07 16:42