You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

长时间运行应用的JFR文件轮转方法及当前配置疑问

JFR DumpOnExit 行为说明(针对长时间运行应用)

针对你设置的JFR参数,直接给出结论:

  • 如果没有配置maxsize(最大缓存/文件大小)或maxage(最大保留事件时长)参数,退出时生成的JFR文件会完整记录从应用启动到退出6天内的所有事件,不会做FIFO覆盖或日志轮转。

原因解释

你启用的是默认录制(defaultrecording=true),在未设置maxsize/maxage的情况下,JFR会持续将事件写入内存缓冲区,当缓冲区占满时会自动扩容(只要系统剩余内存允许),不会丢弃旧事件。直到应用触发退出逻辑时,才会把所有缓存的事件一次性dump到dumponexitpath指定的文件中。

注意事项与优化建议

6天的全量事件记录会生成体积非常大的JFR文件,可能带来两个问题:

  1. 磁盘空间被大量占用,甚至导致磁盘满;
  2. 后续用JDK Mission Control等工具分析时,加载超大文件会非常缓慢,甚至出现内存不足。

建议调整参数优化:

  • 合并你的重复FlightRecorderOptions配置,避免冗余:
    JFR_OPTS="-XX=UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -Djava.net.IPv4Stack=true -XX:+DebugNonSafepoints -XX:FlightRecorderOptions=stackdepth=128,defaultrecording=true,dumponexit=true,dumponexitpath=$APP_HOME/logs/$APP_NAME_$NOW.jfr"
    
  • 添加maxsize和maxage参数限制,比如保留最近7天的事件,且总缓存/文件大小不超过100G(根据你的磁盘和内存情况调整):
    JFR_OPTS="-XX=UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -Djava.net.IPv4Stack=true -XX:+DebugNonSafepoints -XX:FlightRecorderOptions=stackdepth=128,defaultrecording=true,dumponexit=true,dumponexitpath=$APP_HOME/logs/$APP_NAME_$NOW.jfr,maxage=7d,maxsize=100g"
    
  • 或者定期通过jcmd工具手动导出指定时间段的JFR文件,避免最终文件过大:
    jcmd <PID> JFR.dump filename=/path/to/partial_recording.jfr starttime=2024-05-20T00:00:00 endtime=2024-05-21T00:00:00
    

内容的提问来源于stack exchange,提问作者prasadsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:55:29