JFR 详解
Java Flight Recorder(JFR)是 JVM 内置的性能数据收集引擎,被 Oracle 收购后成为商业特性,但在 OpenJDK 11+ 中已开源免费使用。JFR 与 JMC(Java Mission Control)配合使用,是生产环境性能分析的标准工具。
JFR 架构
JFR 的工作原理:
- JVM 内部埋点产生事件
- 事件写入环形缓冲区
- 缓冲区满或录制结束时写入 .jfr 文件
- 使用 JMC 分析录制数据
JFR 事件类型
JFR 收集的事件类型:
JFR 配置模式
JFR 提供两种配置模式:
default 配置
profile 配置
自定义配置
JFR 使用方法
方法一:启动时录制
方法二:运行时录制
方法三:持续录制
JFR 命令行工具
jfr 命令(Java 14+)
示例输出
JFR 开销分析
JFR 的设计目标是对应用影响小于 1%:
优化措施:
- 环形缓冲区避免持续写入
- 自适应采样频率
- 事件聚合减少数据量
JFR 与其他工具对比
本章小结
JFR 的核心特点:
- 低开销:设计目标 < 1%
- 丰富数据:涵盖 GC、编译、内存、CPU 等
- 持续录制:可以一直运行
- 生产安全:对业务影响小
JFR 是生产环境性能分析的首选工具。
延伸思考
JFR 为什么能做到这么低的开销?
关键设计:
- 事件聚合:多个同类事件合并统计
- 自适应采样:根据负载动态调整采样频率
- 环形缓冲区:避免持续磁盘写入
- JVM 内置:与 JVM 紧密集成,减少代理开销