OpenJDK 17.x自带JFR(Java Flight Recorder)工具

OpenJDK 17.x自带JFR(Java Flight Recorder)工具,可以通过jfr命令查看和分析飞行记录文件(.jfr)。JFR是JDK自带的低开销性能监控和事件记录工具,常用于排查CPU占用、GC、线程阻塞、锁竞争、内存分配等问题。


1. 查看是否支持JFR

执行:

java -version
jfr --version

查看JFR命令路径:

which jfr

Windows:

where jfr

注意:需要安装完整的JDK17,而不只是JRE运行环境。

2. 查看JFR飞行记录

假设已有文件:

recording.jfr

查看文件概要:

jfr summary recording.jfr

查看所有事件:

jfr print recording.jfr

查看指定事件:

jfr print --events jdk.GarbageCollection recording.jfr

查看CPU采样:

jfr print --events jdk.ExecutionSample recording.jfr

查看线程阻塞:

jfr print --events jdk.ThreadPark recording.jfr

查看锁竞争:

jfr print --events jdk.JavaMonitorEnter recording.jfr

3. 如果需要查看正在运行的Java进程

jfr主要用于解析.jfr文件,查看正在运行的JVM则使用jcmd。

查看Java进程:

jcmd -l

查看当前JFR录制状态:

jcmd <pid> JFR.check

导出正在录制的数据:

jcmd <pid> JFR.dump filename=recording.jfr

启动一段新的录制:

jcmd <pid> JFR.start duration=300s filename=recording.jfr

停止录制:

jcmd <pid> JFR.stop

4. 推荐的分析流程

# 1. 查看录制文件概要
jfr summary recording.jfr

# 2. 查看GC事件
jfr print --events jdk.GarbageCollection recording.jfr

# 3. 查看CPU采样
jfr print --events jdk.ExecutionSample recording.jfr

# 4. 查看锁竞争
jfr print --events jdk.JavaMonitorEnter recording.jfr

# 5. 导出JSON方便后续分析
jfr print --json recording.jfr > recording.json

5. 是否有可视化工具?

推荐使用JDK Mission Control(JMC)它可以直观查看:

  • CPU热点方法及调用栈
  • GC频率、耗时和内存分配
  • 线程状态、线程阻塞
  • 锁竞争
  • 对象分配和内存使用趋势

官方文档:

建议: 如果你是要排查Java服务CPU高、频繁GC、接口响应慢等问题,优先用jcmd导出JFR,再用JMC打开.jfr文件分析,比直接使用jfr print更直观。