我面临OutOfMemor错误,JMeter停止工作......
java.lang.OutOfMemoryError: Java heap space Dumping heap to
java_pid4412.hprof ... Heap dump file created [591747609 bytes in
71.244 secs] Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space Exception in thread
"AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError:
Java heap space Exception in thread "AWT-EventQueue-0"
java.lang.OutOfMemoryError: Java heap space
如何解决?
我的系统具有非常好的规格,如16GB RAM,2x四核处理器,146 GB硬盘。
任何人都可以帮助我吗?
答案 0 :(得分:16)
您的堆转储显示您使用的默认JMeter设置为512 Mo. 所以,即使你有16GB,你也没有使用它们。
将jmeter.bat中的默认JVM可选替换为正确的大小:
set HEAP=-server -Xms768m -Xmx768m -Xss128k
set NEW=-XX:NewSize=1024m -XX:MaxNewSize=1024m
另见:
答案 1 :(得分:15)
您为JVM分配了多少内存?某处有512 MB?
配置
java -Xms<initial heap size> -Xmx<maximum heap size>
答案 2 :(得分:9)
要优化 OutOfMemoryError
,请遵循以下步骤:
JMeter是一个使用 JVM 运行的Java工具。为了获得最大的能力,我们需要在执行期间为JMeter提供最大的资源。首先,我们需要增加堆大小(在JMeter bin目录中,我们得到jmeter.bat/sh
)。
HEAP=-Xms512m –Xmx512m
这意味着默认分配的堆大小最小为512MB,最大为512MB。根据您自己的机器配置进行配置。还应记住操作系统还需要一些内存,因此不应分配所有物理RAM。
JMeter是Java GUI 应用程序。它还具有非GUI资源(CPU / RAM)。如果我们在非GUI模式下运行Jmeter,它将消耗更少资源,我们可以运行更多线程。
在负载测试期间应禁用监听器。启用它们会导致额外的开销,这会占用测试中更重要元素所需的宝贵资源。
Java和JMeter应该不断更新。
在存储请求和响应头时,断言结果和响应数据会占用大量内存!因此,除非绝对必要,否则最好不要将这些值存储在JMeter上。
也可以添加或修改JMeter启动脚本中的以下JVM参数:
<强> 1。添加内存分配率:
NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
这意味着内存将以此速率增加。
2. -server
- 这会将JVM切换为“服务器”模式,并优化运行时参数。在这种模式下,JMeter启动速度较慢,但整体吞吐量会更高。
3. -d64
- 使用64位操作系统时,使用此参数可以明确告诉JVM以64位模式运行。
4. -XX:+UseConcMarkSweepGC
- 这会强制使用CMS垃圾收集器。它会降低整体吞吐量,但会导致CPU密集型垃圾收集更短。
5. -XX:+DisableExplicitGC
- 这可以防止应用程序强制进行昂贵的垃圾收集,并有助于避免意外暂停。
为了更好,更详细地理解,有关9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure的博客很有帮助。
答案 3 :(得分:5)
我也遇到了这个问题,我调整配置java -Xms<initial heap size> -Xmx<maximum heap size>
的程度并不重要,因为我总是内存不足。最后我发现在GUI模式下运行JMeter(特别是对于监听器)会导致瓶颈。使用JMeter的最佳方法,特别是对于扩展测试或运行多个从属服务器,处于非GUI模式,如下所示:
jmeter -n -t testplan.jmx -r
查看此链接,了解如何以正确的方式进行远程测试:http://wiki.apache.org/jmeter/JMeterFAQ#How_to_do_remote_testing_the_.27proper_way.27.3F。阅读有关“正确方法”的远程测试部分。
希望这有帮助。
答案 4 :(得分:4)
在与许多用户进行测试期间,您应该检查是否没有使用树结果侦听器。
检查jmeter最佳做法以避免此类问题。
此致
答案 5 :(得分:2)
虽然您的服务器有16 GB RAM,但JMeter的默认堆大小为512 MB,请按照以下步骤增加堆大小
1. Open jmeter file using vi editor /text editor
2. Search for "HEAP"
3. Change minimum (-Xms) and Maximum (-Xmx) heap values as you required
4. Save and quit (!wq enter)
5. Start Jmeter by sh jmeter.sh or bash jmeter.bat or java -jar ApacheJMeter.jar
答案 6 :(得分:2)
您必须在jmeter.bat文件中更改HEAP SIZE。首先,您必须将2GB或6GB(或您要放置的大小)大小转换为mb,然后保存并重新启动.bat文件。
设置“设置HEAP = - Xms512m -Xmx512m ”的值
答案 7 :(得分:2)
在Jmeter版本3.x中,它在$ JMETER_HOME / bin / jemter.sh(jmeter.bat)中提到:
##环境变量:
## JVM_ARGS - 可选的java args,例如-Dprop = VAL
##例如
## JVM_ARGS =“ - Xms512m -Xmx512m”jmeter.sh等。
所以在你的情况下,你可以根据自己的需要设置它,例如:
JVM_ARGS="-Xms1024m -Xmx1024m"
答案 8 :(得分:2)
以非GUI模式运行Jmeter。增加内存的堆大小。添加很少/没有监听器。 要在非GUI模式下运行Jmeter,请转到bin目录并在该窗口中打开命令提示符。使用以下命令“ jmeter.bat -n -t Test.jmx -l Test.csv”,此处Test.jmx是我需要在非GUI模式下打开的测试文件,而Test.csv是我需要在其中打开的文件结果已存储。 要增加内存大小,请使用命令HEAP =“-Xms512m -Xmx2048m”,此处512是已分配的内存,而2048是我需要分配给Jmeter的内存。
希望这会有所帮助
答案 9 :(得分:0)
调整堆大小,如其他答案中所述,并考虑一些最佳实践
这2项将大大提高您的性能和堆大小使用
答案 10 :(得分:0)
许多这样的答案都是过时的。当前正在使用jmeter v5.1.1 r1855137:
# Set var to increase available memory
JVM_ARGS="-Xms2048m -Xmx4096m"
# Run jmeter via sh script, e.g.:
/jmeter/5.1.1/libexec/bin/jmeter.sh -n -t testfile.jmx -l results.jtl -j log.txt
您可以通过log.txt文件验证是否可以增加内存,并使用上面的值显示以下内容:
INFO o.a.j.JMeter: Max memory =3817865216