一、为什么需要 JFR?
在生产环境中,性能问题往往是最难排查的 —— 日志只能看到表象,监控指标粒度又不够细,Profiler 工具大多数不适合直接挂在生产环境,因为性能开销太大。
Java Flight Recorder (JFR) 的出现就是为了解决这个痛点:
- 几乎 零开销 的性能数据采集
- 与 JDK 深度集成,可直接记录 JVM 内部运行细节
- 特别适合 线上生产环境 长时间运行
一句话概括:JFR = Java 应用的黑匣子。
二、JFR 的核心功能
JFR 可以捕获和分析 JVM 内部的各种事件,主要包括:
- 内存事件:对象分配、GC 行为、堆使用情况
- 线程事件:线程状态、锁竞争、阻塞、CPU 占用
- 类加载:类加载/卸载次数、耗时
- I/O 事件:Socket、文件 I/O 延迟
- JVM 内部事件:编译器 JIT 行为、Safepoint 停顿
- 应用自定义事件:支持开发者自己埋点
这些信息几乎等同于你“实时观察 JVM 内部器官运作”,对性能诊断非常有价值。
三、JFR 的使用方法
1. 启动时开启 JFR
在启动 Java 应用时加上参数:
java -XX:StartFlightRecording=name=MyApp,filename=recording.jfr,duration=1m -jar myapp.jar
name:录制名称filename:输出文件名duration:持续时间,例如 1m 表示录制 1 分钟
2. 运行时动态开启 JFR(更常用)
使用 jcmd 命令可以在不重启 JVM 的情况下开启录制:
jcmd <pid> JFR.start name=profile duration=120s filename=app.jfr
结束录制:
jcmd <pid> JFR.stop name=profile
这样可以在问题出现时“即时打开黑匣子”。
3. 分析录制文件
录制下来的 .jfr 文件可以用 Java Mission Control (JMC) 打开:
jmc
JMC 提供了图形化分析界面,可以看到:
- CPU 占用最高的方法
- GC 停顿详情

最低0.47元/天 解锁文章
799

被折叠的 条评论
为什么被折叠?



