🌹🌹 如果您觉得我的文章对您有帮助的话,记得在 GitHub 上 star 一波哈 🌹🌹
1 Java Flight Recorder 是啥
1.1 简介
Java Flight Recorder 简称 JFR,OpenJDK 从 11 版本开始支持。它是一个低开销的数据收集框架,可用于在生产环境中分析 Java 应用和 JVM 运行状况及性能问题。
1.2 JFR 的背景
故障诊断、监控和 profile 收集分析是开发周期中不可缺少的一部分。但是很多问题都只会在高负载的生产环境中产生。此时就需要一个可以在生产环境中使用的监控工具,JFR 由此而生。
JFR 会从应用程序中记录运行时事件,同时也会记录 JVM 和 OS 的。记录的结果会存在一个单独的文件中,此文件可供开发工程师分析 bug 和性能问题。
同时 JDK 中也提供了可视化工具来分析这类文件。
1.3 详述
JFR 在 JEP:167 的 Event-based JVM Tracing 的基础上做了扩展。JEP167 只将 event 简单的输出到 stdout,而 JFR 提供了更高性能的基于二进制格式的 event 输出。
JFR 在 JDK 中相关的模块如下:
jdk.jfr
* API and internals
* Requires only java.base (suitable for resource constrained devices)
jdk.management.jfr
* JMX capabilities
* Requires jdk.jfr and jdk.management
JFR 有如下两种启动方式
- 增加 JVM 参数:-XX:StartFlightRecording
- 通过 jcmd 工具使用,用例如下:
- jcmd JFR.start :开始记录
- jcmd JFR.dump filename=recording.jfr :将记录文件 dump 下来
- jcmd JFR.stop :停止
dump 下来的 jfr 文件可以通过 jmc 来分析。
1.4 通过 jcmd 转储 JFR 文件
就是下面这个文件了
2 通过 jmc 分析 jfr
JDK11 中已经移除了 jmc 工具包,从 JDK11 的 what's new 可以看出:
但是,跑在 JDK11 上的应用程序,dump 出来的 jfr 用 jmc6 及以前的版本都是打不开的,需要最新的 jcm7 才能打开:
经过各种 google,最终发现,目前还无法直接下载 jmc7 的二进制版,但可以自行 build。build 方式如下:
编译完成后,打开 jmc,加载 jfr 文件,就可以看到下面的界面了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于