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<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】:您的堆转储显示您正在使用默认的 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
,应遵循以下步骤:
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的主要内容,如果未能解决你的问题,请参考以下文章