jmeter java.lang.OutOfMemoryError: Java heap space 并发线程高,内存溢出问题

jmeter 并发线程高,内存溢出问题

本机器5000用户数,命令行跑压测,没有报内存溢出错误,但是当增加到10000,报内存溢出错误。
在这里插入图片描述

1、打开jmeter.bat文件,按关键字“HEAP”搜索,把原来的配置改为如下:
修改前:

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m)

修改后:

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms512m -Xmx4000m
    set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m)

set HEAP=-Xms512m -Xmx4000m:调整堆内存的大小
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m:调整堆内存中新生带的大小
注意:
这个值不是越大越好,要根据压测使用的机器而定,一般而言,堆内存的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、
卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,调整的时候其本身会占用很多内存),NEW分配的内存,不宜太大。
2、修改完成后保存,重启JMeter,即可生效。
三、小结
1、这种修改堆大小的方法只适用一部分情况,并不是万能的,当需要模拟的线程数较大时,就需要根据具体情况采用分布式压测的方式了。
2、命令行运行JMeter时,一定要禁用“查看结果树”、“聚合报告”等监听器,因为真的真的真的很消耗内存。
我修改到这里,重新启动电脑,把不用的应用都关了,然后命令行模式,重新跑10000个线程就好了,没有报内存溢出错误java.lang.OutOfMemoryError: Java heap space
在这里插入图片描述

如果经过如上操作,还没好,可以再尝试一下方法,本人没有尝试,有兴趣可以尝试下:

大并发或者循环次数过多的时候,jmeter容易出现 java.lang.OutOfMemoryError: Java heap space这样的异常,其中修改jmeter.bat 或者jmeter.sh  可能都不会管用,因此查看官网 http://jmeter.apache.org/usermanual/get-started.html  有以下办法:
1.禁用脚本中的查看结果树,聚合报告(这些非常消耗内存);
2.设置jvm的参数
Windows:
    set JVM_ARGS="-Xms1024m -Xmx1024m -Dpropname=propvalue
     jmeter -t test.jmx …
 Linux:
   JVM_ARGS="-Xms1024m -Xmx1024m" jmeter -t test.jmx [etc.]
set JVM_ARGS=-Xms1024m -Xmx1024m -Dpropname=value

在这里插入图片描述

Google翻译后的中文
在这里插入图片描述


版权声明:本文为zzhangsiwei原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。