使用 Java Flight Recorder 与 OpenJDK 11

主要观点: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 有defaultprofile两种工厂制作的配置文件,示例中使用了profile配置。
  • JMC 在分析 JFR 记录时存在一些界面显示问题,如内存视图对象直方图列表数字缺失等。
阅读 8
0 条评论