如何以低成本使用Java Flight Recorder (JFR) 捕获生产环境实时性能数据?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1053个文字,预计阅读时间需要5分钟。
JFR系统在生产环境中能够长期稳定运行,关键不在于能不能开得起,而是怎么开才不扰民。默认配置下,性能损耗不明显,interval=1ms和interval=10ms的差异,就体现了服务稳定性的分水岭。
用 jcmd 动态启停,别碰重启
生产环境最怕改 JVM 参数后 reload 或重启。JFR 支持运行时控制,完全绕过这个雷区:
-
jps -l找出目标进程 ID(比如12345) - 启动录制:
jcmd 12345 JFR.start name=prod-6h,settings=profile,filename=/var/log/jfr/prod-$(date +%s).jfr,maxage=6h,maxsize=200M - 临时 dump 当前缓冲数据(不停止录制):
jcmd 12345 JFR.dump name=prod-6h filename=/var/log/jfr/dump-$(date +%s).jfr - 问题复现后停止:
jcmd 12345 JFR.stop name=prod-6h
注意:settings=profile 是生产推荐配置,它禁用低频高开销事件(如类加载细节),只保留 CPU、GC、线程、锁、IO 等核心指标;而 settings=default 会记录更多内容,开销可能升至 3%–5%,慎用。
本文共计1053个文字,预计阅读时间需要5分钟。
JFR系统在生产环境中能够长期稳定运行,关键不在于能不能开得起,而是怎么开才不扰民。默认配置下,性能损耗不明显,interval=1ms和interval=10ms的差异,就体现了服务稳定性的分水岭。
用 jcmd 动态启停,别碰重启
生产环境最怕改 JVM 参数后 reload 或重启。JFR 支持运行时控制,完全绕过这个雷区:
-
jps -l找出目标进程 ID(比如12345) - 启动录制:
jcmd 12345 JFR.start name=prod-6h,settings=profile,filename=/var/log/jfr/prod-$(date +%s).jfr,maxage=6h,maxsize=200M - 临时 dump 当前缓冲数据(不停止录制):
jcmd 12345 JFR.dump name=prod-6h filename=/var/log/jfr/dump-$(date +%s).jfr - 问题复现后停止:
jcmd 12345 JFR.stop name=prod-6h
注意:settings=profile 是生产推荐配置,它禁用低频高开销事件(如类加载细节),只保留 CPU、GC、线程、锁、IO 等核心指标;而 settings=default 会记录更多内容,开销可能升至 3%–5%,慎用。

