【问题标题】:JMeter OutOfMemoryErrorJMeter 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 硬盘。

谁能帮帮我?

【问题讨论】:

标签: memory jmeter out-of-memory heap-memory


【解决方案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
      

      另请看:

      【讨论】:

        【解决方案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
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-10-04
                      • 2020-03-10
                      • 2019-01-01
                      • 2011-05-16
                      • 2013-06-21
                      • 2013-11-18
                      • 1970-01-01
                      相关资源
                      最近更新 更多