JMeter出现OutOfMemoryError错误,如何正确修改堆内存大小?
堆内存修改不生效的常见原因及解决办法
- 配置文件修改错误
从JMeter 5.1版本开始,堆内存的官方配置入口就迁移到了bin目录下的setenv.bat文件(默认不存在,需要手动创建),jmeter.bat中的HEAP配置优先级更低,如果存在setenv.bat文件,你修改jmeter.bat的参数会被直接覆盖,不会生效。 - 32位环境限制
如果你使用的是32位JDK或者32位JMeter,堆内存最大仅支持设置到2GB左右,设置6GB的参数会直接失效,需要先更换为64位JDK(推荐JDK8或JDK11,JMeter对更高版本JDK兼容性不稳定)和64位JMeter。 - 启动路径不匹配
如果你平时通过桌面快捷方式启动JMeter,需要确认快捷方式指向的JMeter路径和你修改配置文件的JMeter路径一致,避免修改了另一个版本/目录的配置。 - 未重启生效
修改完配置后需要完全关闭所有JMeter进程,再重新启动才会加载新的内存配置。
正确的堆内存修改步骤
- 打开CMD窗口执行
java -version,确认输出中包含64-Bit字样,确认使用64位JDK - 进入你正在使用的JMeter根目录下的
bin文件夹,新建名为setenv.bat的文件,写入以下内容:
set HEAP=-Xms6g -Xmx6g -XX:MaxMetaspaceSize=512m
这里将初始堆和最大堆都设为6G,避免运行时动态调整堆带来的额外性能开销,元空间设为512M足够日常使用
3. 完全关闭所有JMeter窗口,直接进入bin目录双击jmeter.bat启动,启动后CMD窗口开头就会显示新的堆内存配置
额外优化建议(避免再次出现OOM)
- 执行负载测试时必须使用CLI命令行模式,不要用GUI模式跑压测,GUI仅用来编写和调试脚本,运行压测时加
-n参数以CLI模式启动,内存占用会大幅降低 - 跑压测过程中禁用所有监听器,不要在测试运行时开启Graph Report等组件查看结果,等测试完全结束后再单独打开JMeter加载结果文件生成报告
- 测试结果文件选择CSV格式存储,不要选择XML格式,CSV体积更小,读写时的内存占用远低于XML格式
内容的提问来源于stack exchange,提问作者emeraldgold07
相关产品推荐
相关产品推荐

