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

读取.jfr文件触发OutOfMemoryError,如何调整jfr工具的堆内存大小?

解决方法

方法1:通过JAVA_TOOL_OPTIONS环境变量传递JVM参数

jfr本质是运行在JVM上的Java程序,JDK提供的JAVA_TOOL_OPTIONS环境变量可以为当前会话启动的所有Java进程传递自定义JVM参数,操作方式如下:

  • Linux/macOS 终端执行:
export JAVA_TOOL_OPTIONS="-Xmx4g"
jfr print --events "jdk.CPULoad" <你的jfr文件路径>
# 执行完后可执行unset JAVA_TOOL_OPTIONS取消环境变量,避免影响其他Java程序
  • Windows cmd 执行:
set JAVA_TOOL_OPTIONS="-Xmx4g"
jfr print --events "jdk.CPULoad" <你的jfr文件路径>
  • Windows PowerShell 执行:
$env:JAVA_TOOL_OPTIONS="-Xmx4g"
jfr print --events "jdk.CPULoad" <你的jfr文件路径>

这里的-Xmx4g代表分配4GB堆内存,你可以根据文件大小调整数值,1.5GB的jfr文件分配2-4GB堆即可正常运行。

方法2:直接调用jfr主类指定堆内存

如果不想全局设置环境变量影响其他Java进程,可以直接手动启动jfr的主类并传入JVM参数:

java -Xmx4g jdk.jfr.internal.tool.Main print --events "jdk.CPULoad" <你的jfr文件路径>

额外优化建议

如果jfr文件过大,也可以先使用jfr自带的裁剪命令缩小文件范围后再分析,无需分配过高堆内存:

# 按时间范围裁剪
jfr truncate --start <起始时间> --end <结束时间> --output 裁剪后的文件.jfr 原文件.jfr
# 仅保留指定事件裁剪
jfr view --events "jdk.CPULoad" 原文件.jfr --output 仅含CPU负载事件的文件.jfr

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:04