主要观点:Java Flight Recorder(JFR)曾是 Oracle JDK 的商业附加组件,现已开源,使用 OpenJDK 11 的用户可免费使用;JFR 是用于收集运行中 Java 应用诊断和分析数据的工具,性能开销小;Java Mission Control 也已开源,可用于打开 JFR 生成的记录;介绍了在 OpenJDK 11 中使用 JFR 的步骤,包括启用 JFR、按需捕获记录、分析记录等;同时指出了使用 JFR 的一些注意事项,如记录不向后兼容、JMC 7 为早期访问版本、Docker 镜像存在 bug 等。
关键信息:
- JFR 以前是 Oracle JDK 商业部分,现随 Java Mission Control 开源,OpenJDK 11 用户可免费使用。
- JFR 可收集运行线程、GC 周期等多方面数据,性能开销小。
- 启用 JFR 需使用特定 JVM 参数,如
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
等,还可设置记录大小和时长等。 - 可用 JCMD 工具按需导出记录,如
JFR.check
查看运行记录详情,JFR.dump
导出记录。 - Java Mission Control 需单独下载,JMC 6 新增自动化分析结果屏幕,JMC 7 仍为早期访问版本且存在一些问题。
- JFR 记录不向后兼容,JMC 7 无法分析 HPROF 文件,官方 Docker 镜像存在阻止 JVM 启动的 bug。
重要细节:
- 示例代码中通过两个线程生产和消费大对象导致
OutOfMemoryError
,可使用 JFR 分析。 - 启用 JFR 时可设置
dumponexit
选项,在 JVM 异常终止时确保记录不为空。 - JFR 有
default
和profile
两种工厂制作的配置文件,示例中使用了profile
配置。 - JMC 在分析 JFR 记录时存在一些界面显示问题,如内存视图对象直方图列表数字缺失等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。