JMeter OutOfMemoryError

时间:2010-02-18 06:34:44

标签: memory heap jmeter out-of-memory heap-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

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

任何人都可以帮助我吗?

11 个答案:

答案 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 ,请遵循以下步骤:

  • 增加Java堆大小:

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

HEAP=-Xms512m –Xmx512m

这意味着默认分配的堆大小最小为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 - 这可以防止应用程序强制进行昂贵的垃圾收集,并有助于避免意外暂停。

为了更好,更详细地理解,有关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)

调整堆大小,如其他答案中所述,并考虑一些最佳实践

  • 运行测试时(当然不是在验证时)使用非gui模式
  • 禁用任何重型侦听器,例如查看结果树,而是使用简单数据写入器并在之后分析您的数据

这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