22

我面临以下 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 硬盘。

谁能帮我?

4

11 回答 11

18

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

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

set HEAP=-server -Xms768m -Xmx768m -Xss128k 

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

还请看:

于 2012-11-23T06:57:01.253 回答
17

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

配置是

java -Xms<initial heap size> -Xmx<maximum heap size>
于 2010-02-18T06:39:59.143 回答
15

要优化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 - 这可以防止应用程序强制进行昂贵的垃圾收集,并有助于避免意外暂停。

为了更好和更详细地理解,这篇关于JMeter 负载测试“内存不足”失败的 9 个简单解决方案的博客很有帮助。

于 2016-07-23T16:01:12.467 回答
6

这些答案中有很多已经过时了。目前使用 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
于 2019-10-04T18:48:23.540 回答
5

我也有这个问题,我调整了多少配置都没关系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 。阅读“正确方式”远程测试部分。

希望这可以帮助。

于 2012-10-25T19:50:38.270 回答
4

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

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

问候

于 2012-08-09T20:22:14.393 回答
2

在 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"
于 2017-05-16T12:23:30.680 回答
2

虽然您的服务器有 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
于 2016-03-25T02:01:18.197 回答
2

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

希望这可以帮助

于 2018-11-06T10:11:43.120 回答
2

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

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

于 2017-03-03T10:18:31.083 回答
0

如其他答案中所述调整堆大小,并考虑一些最佳实践

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

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

于 2016-04-27T12:25:06.373 回答