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更直观。