Java jmeter 测试因内存不足错误而失败
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20647651/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jmeter test failed with out of memory error
提问by shab
When try to run jMeter with 50 or more user it gives OutOfMemoryError:
当尝试使用 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!
I tried to increase the heap size but still getting the same error.
Even i tried to remove all the listeners but nothing changed.
我尝试增加堆大小,但仍然遇到相同的错误。
即使我试图删除所有听众,但没有任何改变。
回答by Dmitri T
It looks like that you're just lacking Java Heap Space. It's normal as JMeter by default has a very low heap allocation. It's controllable via -Xmx
parameter.
看起来您只是缺少 Java 堆空间。这是正常的,因为默认情况下 JMeter 的堆分配非常低。可以通过-Xmx
参数控制。
There is a line in jmeter.bat
or jmeter.sh
script which recommends launching JMeter as
jmeter.bat
或jmeter.sh
脚本中有一行 建议将 JMeter 启动为
JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh
You can try increasing maximum heap until you'll stop receiving these errors. I'd recommend to set it to something like 80% of your hardware RAM.
您可以尝试增加最大堆,直到您不再收到这些错误。我建议将其设置为硬件 RAM 的 80%。
Also consider JMeter Performance and Tuning Tips articleto make sure that you disable memory-consuming listeners, don't overscript, use post-processors efficiently, etc.
还要考虑JMeter Performance and Tuning Tips 文章,以确保您禁用消耗内存的侦听器,不要过度编写脚本,有效地使用后处理器等。
回答by Himanshu Tewari
After the increase, the heap size in bat file remove all listener from the test plan, Then run your script and see the magic.Now you won't get out of memory error in jmeterEnjoy!
增加后,bat文件中的堆大小从测试计划中删除所有侦听器,然后运行您的脚本并查看魔术。现在您不会在jmeter中出现内存不足错误享受!
回答by Himanshu Tewari
also you should always consider running your test non-gui mode.
您还应该始终考虑运行您的测试非 gui 模式。
回答by user4212639
Open bin/jmeter.bat on windows or bin/jmeter.sh on linux, find this line:
在 windows 上打开 bin/jmeter.bat 或在 linux 上打开 bin/jmeter.sh,找到这一行:
set HEAP=-Xms512m -Xmx512m
This variable is passed as arguments to jmeter at startup. Increase the default heapsize like this:
此变量在启动时作为参数传递给 jmeter。像这样增加默认堆大小:
set HEAP=-Xms1024m -Xmx1024m
You could add more space if you have available and if jmeter needs more. Hope that helps.
如果您有可用空间并且 jmeter 需要更多空间,您可以添加更多空间。希望有帮助。
回答by Jerome L
There can be many reasons why JMeter is consuming a lot of memory:
JMeter 消耗大量内存的原因可能有很多:
- Use and abuse of UI Listeners,
- Running a test in UI mode: run the test in batch mode instead
- JMeter SaveService badly configured: Are you saving requests and responses in JTL?
- Too many threadsper JMeter load generator? Usually less than 1000 per engine should be okay, but it depends on the script complexity too. See Remote Testingto run JMeter in Distributed Mode.
- 使用和滥用UI 监听器,
- 在 UI 模式下运行测试:改为以批处理模式运行测试
- JMeter SaveService 配置错误:您是否在 JTL 中保存请求和响应?
- 每个 JMeter 负载生成器的线程太多?通常每个引擎少于 1000 应该没问题,但这也取决于脚本的复杂性。请参阅远程测试以在分布式模式下运行 JMeter 。
Tweaking the Heap is just one way to fix those issues:
调整堆只是解决这些问题的一种方法:
JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh
JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh
Check out JMeter Out Of Memory: 12 Ways to Fix Themfor even more valuable tips.
查看JMeter 内存不足:修复它们的 12 种方法以获得更有价值的提示。
回答by Java Basketball
in the Jmeter 3.x. there are two steps to solve this problem.
在 Jmeter 3.x 中。有两个步骤可以解决这个问题。
Step 1, to modify the JVM memory in the JMeter batch file
步骤一、在JMeter批处理文件中修改JVM内存
## ==============================================
## Environment variables:
## JVM_ARGS - optional java args, e.g. -Dprop=val
##
## e.g.
## JVM_ARGS="-Xms512m -Xmx512m" jmeter etc.
##
## ==============================================
this is a default value in the jmeter.sh, according to your environment:
根据您的环境,这是 jmeter.sh 中的默认值:
JVM_ARGS="-Xms512m -Xmx2048m"
in the jmeter.bat:
在 jmeter.bat 中:
set JVM_ARGS=-Xms512m -Xmx2048m
Step 2, to Modify HEAP="-Xms512m -Xmx512m" in the JMeter batch file:
第二步,修改JMeter批处理文件中的HEAP="-Xms512m -Xmx512m":
in the jmeter.sh
在 jmeter.sh
HEAP="-Xms512m -Xmx2048m"
in the jmeter.bat:
在 jmeter.bat 中:
set HEAP=-Xms512m -Xmx2048m
回答by Animesh
My one liner for this on a Mac (jmeter is bash script in this case):
我在 Mac 上的一个衬里(在这种情况下,jmeter 是 bash 脚本):
$ JVM_ARGS="-Xms4g -Xmx4g -XX:NewSize=4g -XX:MaxNewSize=4g" && export JVM_ARGS && jmeter
$ JVM_ARGS="-Xms4g -Xmx4g -XX:NewSize=4g -XX:MaxNewSize=4g" && 导出 JVM_ARGS && jmeter
回答by Claudio Kuenzler
To set a higher JVM heap space, find your jmeter script (/usr/share/jmeter/bin/jmeteron Ubuntu when jmeter
was installed through apt) and add the following line (found on https://www.blazemeter.com/blog/9-easy-solutions-jmeter-load-test-%e2%80%9cout-memory%e2%80%9d-failure/) before the run_java line:
要设置更高的 JVM 堆空间,请找到您的 jmeter 脚本(通过 apt 安装时在 Ubuntu 上的/usr/share/jmeter/bin/jmeterjmeter
)并添加以下行(在https://www.blazemeter.com/blog 上找到)/9-easy-solutions-jmeter-load-test-%e2%80%9cout-memory%e2%80%9d-failure/) 在 run_java 行之前:
HEAP="-Xms512m -Xmx4g"
HEAP="-Xms512m -Xmx4g"
Here the maximum heap space was increased to 4GB.
这里最大堆空间增加到 4GB。
However you might still run out of memory. This can happen when you run a lot of samples and you have a listener which collects data for each sample (for example Listener -> View Results in Tree). Remove this kind of (result) listener and focus on summarized result listeners (e.g. Listener -> Summary Report). This uses much less heap space, even for large stress tests.
但是,您可能仍然会耗尽内存。当您运行大量示例并且您有一个为每个示例收集数据的侦听器(例如Listener -> View Results in Tree)时,可能会发生这种情况。删除这种(结果)侦听器并专注于汇总结果侦听器(例如Listener -> Summary Report)。这使用更少的堆空间,即使对于大型压力测试也是如此。