JMeter内存溢出:java.lang.OutOfMemoryError:Java heap space解决

JMeter使用时报错:
Uncaught Exception java.lang.OutOfMemoryError:Java heap space.See log file for details.

问题背景

近期在产品选型项目中,使用JMeter进行极限测试,获取系统极限容量,需要对并发用户翻倍增加。当并发用户数翻倍至一定数量时,并发请求过大,JMeter会出现部分线程无法启动、大量线程无法及时停止任务、JMeter卡死等现象,此时会报出如下错误:java.lang.OutOfMemoryError:Java heap space.

由于JMeter内存是通过java虚拟机JVM管理分配,当栈堆内存达到设置的最大值,此时JMeter开始闹“脾气”了,不愿意再满足测试人员的需求,罢工并提示内存溢出的错误。

解决方法

知道了JMeter问题所在,于是决定满足它──调整内存大小。
1、在JMeter的bin目录下找到Jmeter.bat

2、右键编辑Jmeter.bat,找到HEAP

rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms1024m -Xmx1024m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m

3、修改堆内存大小,由原来512m改为1024m 

set HEAP=-Xms1024m -Xmx1024m

注意:Set HEAP 调整堆内存的大小,Xms与Xmx一般设置为相同,若不一致,当Heap不够用,会发生内存抖动。
setNEW=-XX:NewSize=256m  -XX:MaxNewSize=512m :调整内存中年轻代大小。

关于JVM的新生代参看文章:一文搞懂JVM新生代、老年代和永久代

堆内存的值并非越大越好,根据测试机物理内存而定,一般不要超过测试机物理内存的一半。

4、修改完后保存,重新启动JMeter即可。



我的回答