JMeter OutOfMemoryError

jam*_*mes 17 memory heap heap-memory jmeter out-of-memory

我面临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
Run Code Online (Sandbox Code Playgroud)

怎么解决?
我的系统具有非常好的规格,如16GB RAM,2x四核处理器,146 GB硬盘.

谁能帮我?

Ale*_*aho 16

你为JVM分配了多少内存?在某处可以容纳512 MB?

配置是

java -Xms<initial heap size> -Xmx<maximum heap size>
Run Code Online (Sandbox Code Playgroud)


小智 16

您的堆转储显示您使用的默认JMeter设置为512 Mo.所以即使您有16 GB,也没有使用它们.

将jmeter.bat中的默认JVM可选替换为正确的大小:

set HEAP=-server -Xms768m -Xmx768m -Xss128k 

set NEW=-XX:NewSize=1024m -XX:MaxNewSize=1024m
Run Code Online (Sandbox Code Playgroud)

另请看:


Adn*_*nan 10

要优化OutOfMemoryError这些步骤,应遵循以下步骤:

  • 增加Java堆大小:

JMeter是一个与JVM一起运行的Java工具.为了获得最大的能力,我们需要在执行期间为JMeter提供最大的资源.首先,我们需要增加堆大小(在JMeter bin目录中,我们得到jmeter.bat/sh).

HEAP=-Xms512m –Xmx512m
Run Code Online (Sandbox Code Playgroud)

这意味着默认分配的堆大小最小为512MB,最大为512MB.根据您自己的机器配置进行配置.还应记住操作系统还需要一些内存,因此不应分配所有物理RAM.

  • 在非GUI模式下运行测试:

JMeter是Java GUI应用程序.它还具有非GUI资源(CPU/RAM).如果我们在非GUI模式下运行Jmeter,它将消耗更少的资源,我们可以运行更多的线程.

  • 在测试运行期间禁用所有监听器.它们仅用于调试并使用它们来设计所需的脚本.

在负载测试期间应禁用监听器.启用它们会导致额外的开销,这会占用测试中更重要元素所需的宝贵资源.

  • 使用最新软件:

Java和JMeter应该保持更新.

  • 确定您需要存储哪些指标:

在存储请求和响应头时,断言结果和响应数据会占用大量内存!因此,除非绝对必要,否则最好不要将这些值存储在JMeter上.

  • 调整JVM:

还可以添加或修改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 - 这可以防止应用程序强制进行昂贵的垃圾收集,并有助于避免意外暂停.

为了更好和更详细的理解,这个博客关于JMeter负载测试"Out of Memory"失败的9个简易解决方案是有帮助的.


小智 5

我也有这个问题,我调整配置并不重要java -Xms<initial heap size> -Xmx<maximum heap size>,因为我总是耗尽内存.最后我发现在GUI模式下运行JMeter(特别是对于监听器)会导致瓶颈.使用JMeter的最佳方法,特别是对于扩展测试或运行多个从属服务器,处于非GUI模式,如下所示:

jmeter -n -t testplan.jmx -r
Run Code Online (Sandbox Code Playgroud)

查看此链接并阅读如何以正确的方式进行远程测试:http://wiki.apache.org/jmeter/JMeterFAQ#How_to_do_remote_testing_the_.27proper_way.27.3F.阅读有关远程测试"正确方法"的部分.

希望这可以帮助.


gre*_*gkb 5

很多这些答案已经过时了。目前使用 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
Run Code Online (Sandbox Code Playgroud)

您可以通过 log.txt 文件验证内存增加是否可用,该文件将使用上述值显示以下内容:

INFO o.a.j.JMeter: Max memory     =3817865216
Run Code Online (Sandbox Code Playgroud)