jmeter测试因内存不足错误而失败

时间:2013-12-18 00:44:32

标签: java jmeter

当尝试使用50或更多用户运行jMeter时,它会给出OutOfMemoryError:

2013/12/18 13:35:15 ERROR - jmeter.threads.JMeterThread: Error processing Assertion  java.lang.OutOfMemoryError: Java heap space
2013/12/18 13:35:15 ERROR - jmeter.threads.JMeterThread: Error processing Assertion     java.lang.OutOfMemoryError: Java heap space
2013/12/18 13:35:15 ERROR - jmeter.threads.JMeterThread: Error processing Assertion  java.lang.OutOfMemoryError: Java heap space
2013/12/18 13:35:15 ERROR - jmeter.threads.JMeterThread: Error processing Assertion  java.lang.OutOfMemoryError: Java heap space
2013/12/18 13:35:16 ERROR - jmeter.threads.JMeterThread: Test failed! java.lang.OutOfMemoryError: Java heap space
2013/12/18 13:35:17 ERROR - jmeter.threads.JMeterThread: Test failed! 

我试图增加堆大小,但仍然得到相同的错误 即使我试图删除所有听众,但没有任何改变。

8 个答案:

答案 0 :(得分:36)

看起来你只是缺少Java堆空间。这是正常的,因为默认情况下JMeter的堆分配非常低。它可以通过-Xmx参数控制。

jmeter.batjmeter.sh脚本中有一行建议将JMeter启动为

JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh

您可以尝试增加最大堆,直到您停止接收这些错误为止。我建议将其设置为80%的硬件RAM。

还要考虑JMeter Performance and Tuning Tips article以确保禁用内存消耗的侦听器,不要覆盖,有效使用后处理器等。

答案 1 :(得分:9)

增加之后,bat文件中的堆大小会从测试计划中删除所有侦听器,然后运行你的脚本并看到魔法。现在你不会得到out of memory error in jmeter 享受!

答案 2 :(得分:2)

在Jmeter 3.x.有两个步骤可以解决这个问题。

步骤1,修改JMeter批处理文件中的JVM内存

##   ==============================================
##   Environment variables:
##   JVM_ARGS - optional java args, e.g. -Dprop=val
##
##   e.g.
##   JVM_ARGS="-Xms512m -Xmx512m" jmeter etc.
##
##   ==============================================

这是jmeter.sh中的默认值,根据您的环境:

JVM_ARGS="-Xms512m -Xmx2048m"

在jmeter.bat中:

set JVM_ARGS=-Xms512m -Xmx2048m

步骤2,修改HEAP =" -Xms512m -Xmx512m"在JMeter批处理文件中:

在jmeter.sh

HEAP="-Xms512m -Xmx2048m"

在jmeter.bat中:

set HEAP=-Xms512m -Xmx2048m

答案 3 :(得分:0)

你也应该考虑运行你的测试非gui模式。

答案 4 :(得分:0)

在windows上打开bin / jmeter.bat或在linux上打开bin / jmeter.sh, 找到这一行:

set HEAP=-Xms512m -Xmx512m

此变量在启动时作为参数传递给jmeter。 像这样增加默认的堆大小:

set HEAP=-Xms1024m -Xmx1024m

如果有空的话,你可以增加更多空间,如果jmeter需要更多空间。 希望有所帮助。

答案 5 :(得分:0)

JMeter消耗大量内存的原因有很多:

  • 使用和滥用UI Listeners
  • 在UI模式下运行测试:以批处理模式运行测试
  • JMeter SaveService配置错误:您是否在JTL中保存请求和响应?
  • 每个JMeter负载生成器
  • 线程太多?通常每个引擎少于1000个应该没问题,但这也取决于脚本的复杂性。请参阅Remote Testing分布式模式运行JMeter。

调整堆只是解决这些问题的一种方法:

JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh

查看JMeter Out Of Memory: 12 Ways to Fix Them以获取更多有价值的提示

答案 6 :(得分:0)

我在Mac上为此使用的衬垫(在这种情况下,jmeter是bash脚本):

$ JVM_ARGS =“-Xms4g -Xmx4g -XX:NewSize = 4g -XX:MaxNewSize = 4g” &&导出JVM_ARGS && jmeter

答案 7 :(得分:0)

要设置更大的JVM堆空间,请找到您的jmeter脚本(通过apt安装jmeter时在Ubuntu上的 / usr / share / jmeter / bin / jmeter )并添加以下内容在run_java行之前的行(位于https://www.blazemeter.com/blog/9-easy-solutions-jmeter-load-test-%e2%80%9cout-memory%e2%80%9d-failure/上):

HEAP="-Xms512m -Xmx4g"

此处最大堆空间已增加到4GB。

但是,您可能仍然会用完内存。当您运行大量样本并且有一个侦听器为每个样本收集数据时(例如侦听器->在树中查看结果),可能会发生这种情况。删除这种(结果)侦听器,并专注于汇总结果侦听器(例如 Listener-> Summary Report )。即使对于较大的压力测试,这也会占用更少的堆空间。