JMeter OutOfMemoryError

Posted

技术标签:

【中文标题】JMeter OutOfMemoryError【英文标题】: 【发布时间】:2011-01-18 05:00:33 【问题描述】:

我面临 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、2 个四核处理器和 146 GB 硬盘。

谁能帮帮我?

【问题讨论】:

如果你有一个好的规格机器,那么你将不得不通过增加你的堆大小或许多其他原因来使用它,请参阅此以获取更多详细信息edu.yoursfriends.com/787/out-of-memory-error-in-jmeter 【参考方案1】:

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

配置是

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

【讨论】:

没错 -> 你需要检查分配给程序的堆大小。 这些初始值和最大值是多少?【参考方案2】:

在与许多用户进行测试期间,您应该检查是否没有使用树结果侦听器。

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

问候

【讨论】:

【参考方案3】:

我也遇到了这个问题,我调整了多少配置java -Xms&lt;initial heap size&gt; -Xmx&lt;maximum heap size&gt;都没关系,因为我总是内存不足。最后我发现在 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】:

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

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

set HEAP=-server -Xms768m -Xmx768m -Xss128k 

set NEW=-XX:NewSize=1024m -XX:MaxNewSize=1024m

另请看:

http://wiki.apache.org/jmeter/JMeterFAQ#JMeter_keeps_getting_.22Out_of_Memory.22_errors.__What_can_I_do.3F

http://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/

【讨论】:

【参考方案5】:

虽然您的服务器有 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】:

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

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

这 2 项已经大大提高了您的性能和堆大小使用率

【讨论】:

【参考方案7】:

要优化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 的博客很有帮助。

【讨论】:

【参考方案8】:

您必须在 jmeter.bat 文件中更改 HEAP SIZE。首先,您必须将 2GB 或 6GB(或您要放置的大小)大小转换为 mb,然后保存并重新启动 .bat 文件。

设置“set HEAP=-Xms512m -Xmx512m”的值

【讨论】:

【参考方案9】:

在 Jmeter 3.x 版本中,它在 $JMETER_HOME/bin/jemter.sh(jmeter.bat) 中提到:

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

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

JVM_ARGS="-Xms1024m -Xmx1024m"

【讨论】:

【参考方案10】:

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

希望对你有帮助

【讨论】:

【参考方案11】:

其中很多答案都已过时。目前使用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

【讨论】:

以上是关于JMeter OutOfMemoryError的主要内容,如果未能解决你的问题,请参考以下文章

jmeter学习视频

jmeter——录制jmeter脚本

Jmeter文章索引贴

Jmeter使用流程及简单分析监控(jmeter性能测试)

Jmeter使用流程及简单分析监控(jmeter性能测试)

[Jmeter]jmeter之脚本录制与回放,优化(windows下的jmeter)