【问题标题】:On downloading 1GB file, Uncaught Exception java.lang.OutOfMemoryError in JMeter在下载 1GB 文件时,JMeter 中的未捕获异常 java.lang.OutOfMemoryError
【发布时间】:2020-08-13 13:19:00
【问题描述】:

我正在使用带有 HTTP 请求的 Jmeter 5.2.1 来捕获 1GB 文件下载的性能。在非 GUI 模式下执行脚本时,收到以下错误 -

java.lang.OutOfMemoryError: Java 堆空间 将堆转储到 java_pid7536.hprof ... 已创建堆转储文件 [555071109 字节在 17.048 秒内] 未捕获的异常 java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread Group 1-1,5,main]

jmeter.bat 有属性 "设置 HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"

我在 jmx 文件中没有任何侦听器并使用非 GUI 模式进行测试。我可以知道我需要做哪些改变才能获得成功的响应

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    如果您正在下载一个临时存储在内存中的文件,这意味着每个 JMeter 并发线程(虚拟用户)至少需要 1 GB 的 HEAP 才能检索该文件。

    编辑 jmeter.bat 文件并将堆上限 -Xmx 更改为更高的值。对于 1 个虚拟用户,提供 2 GB 就足够了:

    set HEAP=-Xms1g -Xmx2g -XX:MaxMetaspaceSize=256m
    

    需要重新启动 JMeter 才能获取更改。

    参考资料:

    理想情况下,JMeter 的堆消耗应该在 JVM 堆的 30% 到 80% 之间,实际数量取决于您的测试的性质,只需使用 ie JVisualVM 监控堆使用情况,以确保 JMeter 不会花费太多很多时间在做garbage collection

    【讨论】:

    • 谢谢 Dmitri,它适用于 HEAP=-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m ;对于 HEAP=-Xms1g -Xmx2g -XX:MaxMetaspaceSize=256m - 它引发了相同的堆空间错误消息 Heap dump file created [1091935017 bytes in 32.311 secs]
    【解决方案2】:

    除了 Dmitri 的建议之外,我要补充一点,这种方法对于一次或可能两次下载是可以的,但如果要测试十次或更多并行下载,它根本不可扩展。 恕我直言,更好的解决方案是检查“将响应保存为 MD5 哈希?”在 HTTP 控制器中。

    如果选择此项,则响应不会存储在样本结果中。相反,“计算并存储数据的 MD5 哈希值”(来自手册) 这用于测试大量数据。 优点是数据不存储在内存中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2017-08-25
      • 2013-02-18
      相关资源
      最近更新 更多