如何在命令行上使用 JFR 记录分配?

How to record allocations with JFR on command line?

我有一个使用 Java Mission Control 创建的配置文件,该配置文件启用了分配配置文件。当我使用 JMC UI 录制时,一切正常,我得到了结果。

但是,在导出设置并尝试在命令行上使用 JFR 进行记录后,我没有记录分配,即使我获得了其他分析信息。

我运行录音设置如下: JAVA_OPTS="$JAVA_OPTS -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,settings='<path_to_settings>/settings.jfc',dumponexit=true,dumponexitpath=<output>" java -jar stuff

在 JMC 中加载录音并检查内存部分时,我看到消息 Event type 'Allocation in new TLAB' is not enabled in this recording

设置文件在这里:https://gist.github.com/jmiettinen/1976f9bbe156ecb5e232,它有相关设置java/object_alloc_in_new_TLABjava/object_alloc_outside_TLAB启用。

我是不是漏掉了什么?我正在 运行ning 1.8.0_66 并希望从应用程序开始到停止为止进行连续记录。

你 JDK 是哪个版本的 运行?

有一个错误,已在 7u76 和 8u20 中修复,如果 defaultrecording=true,则不考虑设置参数。

已与 Jfokus 的@jmiettin 验证这些标志是否有效:

如果您想使用特殊设置进行连续记录并让它在退出时转储数据,这些选项似乎对我有用:-XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=rec.jfr -XX:StartFlightRecording=defaultrecording=true,settings=d:/tmp/wop.jfc

区别在于将默认记录和设置参数放在 -XX:StartFlightRecording 标志之后。