JMeter OutOfMemoryError

JMeter OutOfMemoryError,memory,heap,jmeter,out-of-memory,heap-memory,Memory,Heap,Jmeter,Out Of Memory,Heap Memory,我面临下面的内存错误,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 spac

我面临下面的内存错误,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,2个四核处理器,146GB硬盘


有人能帮我吗?

您为JVM分配了多少内存?大约512MB的地方

配置是

java -Xms<initial heap size> -Xmx<maximum heap size>
java-Xms-Xmx

在测试多个用户时,应检查是否未使用树结果侦听器

检查jmeter最佳实践以避免此类问题


关于

我也有这个问题,不管我如何调整配置
java-Xms-Xmx
,因为我总是内存不足。最后,我发现在GUI模式下运行JMeter(尤其是使用侦听器)会导致瓶颈。使用JMeter的最佳方式,尤其是在扩展测试或运行多个从属服务器时,是在非GUI模式下,它看起来像这样:

jmeter -n -t testplan.jmx -r
查看此链接并阅读如何以正确的方式进行远程测试:。阅读“正确方式”远程测试部分


希望这有帮助。

堆转储显示您正在使用默认的JMeter设置512 Mo。 因此,即使您有16gb,您也不会使用它们

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

set HEAP=-server -Xms768m -Xmx768m -Xss128k 

set NEW=-XX:NewSize=1024m -XX:MaxNewSize=1024m
另请看:


尽管您的服务器有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

按照其他答案中提到的调整堆大小,并考虑一些最佳实践

  • 运行测试时(当然不是验证时),请使用非gui模式
  • 禁用任何重侦听器,如查看结果树,但改用简单的数据编写器,然后分析数据

这两项将大大提高您的性能和堆大小使用率

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

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

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

  • 在非GUI模式下运行测试:
JMeter是JavaGUI应用程序。它也有非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:+UseConMarkSweepGC
-这强制使用CMS垃圾收集器。它将降低总体吞吐量,但会导致CPU密集型垃圾收集时间大大缩短

5.
-XX:+DisableExplicitGC
-这可以防止应用程序强制执行昂贵的垃圾收集,并有助于避免意外暂停


为了更好更详细地理解,这个关于的博客很有帮助。

您必须更改jmeter.bat文件中的堆大小。首先,您必须将2GB或6GB(或您想要输入的大小)的大小转换为mb,然后保存它并重新启动.bat文件


在Jmeter版本3.x中,为“Set HEAP=-Xms512m-Xmx512m

设置值$Jmeter_HOME/bin/jemter.sh(Jmeter.bat)中提到:

##环境变量:
##JVM_ARGS-可选的java ARGS,例如-Dprop=val
##例如
##JVM_ARGS=“-Xms512m-Xmx512m”jmeter.sh等

因此,在您的情况下,您可以将其设置为尽可能满足您的需要,例如:

JVM_ARGS="-Xms1024m -Xmx1024m"

在非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的内存

希望这有帮助
JVM_ARGS="-Xms1024m -Xmx1024m"
# 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
INFO o.a.j.JMeter: Max memory     =3817865216