如何配置Java JFR的StartFlightRecording参数使dump文件名带时间戳
Java Flight Recording 文件名加时间戳实现方案
高版本Java内置方案
Java 16 及更高版本已经原生支持文件名内置时间戳,无需编写额外脚本重命名,支持两种配置方式:
方式1:使用默认时间戳占位符
%t是JFR内置的时间戳占位符,默认格式为YYYY_MM_DD_HH_MM_SS,直接写入filename参数即可,时间戳取dump生成的实时时刻:
# 启动时开启自动dump java -XX:StartFlightRecording=dumponexit=true,filename=/path/to/recorders/%t_myrecording.jfr # 手动执行jcmd导出 jcmd <你的Java进程PID> JFR.dump filename=/path/to/recorders/%t_myrecording.jfr
方式2:自定义时间戳格式
如果需要调整时间戳格式,可通过timestamp参数自定义格式规则:
java -XX:StartFlightRecording=dumponexit=true,timestamp=yyyy_MM_dd,filename=/path/to/recorders/${timestamp}_myrecording.jfr
上述配置生成的文件名格式就和你示例中的/path/to/recorders/2021_09_14_myrecording.jfr完全一致。
Java 15及更低版本兼容方案
低版本JDK没有内置时间戳占位符支持,只能通过shell脚本拼接时间实现:
- 启动进程时开启自动dump,时间取进程启动时刻:
TS=$(date +%Y_%m_%d) java -XX:StartFlightRecording=dumponexit=true,filename=/path/to/recorders/${TS}_myrecording.jfr
- 手动执行jcmd导出,时间取dump触发时刻:
TS=$(date +%Y_%m_%d) jcmd <你的Java进程PID> JFR.dump filename=/path/to/recorders/${TS}_myrecording.jfr
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

