未捕获的异常java.lang.OutOfMemoryError:在非gui模式下运行jmeter时出现“无法创建新的本机线程”错误

时间:2016-10-07 07:49:37

标签: jmeter jmeter-plugins

我的情景,

Step1 :我为 1000设置了线程组:线程& 500:秒
Step2 :配置heep space: HEAP = -Xms1024m -Xmx1024m
Step3 :现在,为非gui模式运行jmeter。 在这种情况下,“Uncaught Exception java.lang.OutOfMemoryError :无法创建新的本机线程”在我的系统中出现错误。

我的系统配置

处理器:英特尔®奔腾(R)CPU G2010 @ 2.80GHz×2
操作系统类型:32位
光盘:252.6GB
内存:3.4 GiB

请给我一个解决方案。

谢谢, 瓦拉默。

3 个答案:

答案 0 :(得分:3)

您的计算机没有足够的内存来使用1000个帖子。从错误中可以清楚地看到您的机器无法创建1000个线程。您应该调整机器以解决这种情况。

你必须考虑以下几点:

  • JMeter 是一个使用 JVM 运行的Java工具。要获得最大能力,我们需要在执行期间为JMeter提供最大的资源。首先,我们需要增加堆大小(在JMeter bin目录内,我们得到jmeter.bat / SH)

    HEAP=-Xms512m –Xmx512m

这意味着默认分配的堆大小最小512MB,最大512MB 。根据您自己的PC配置进行配置。请记住,操作系统还需要一些内存,因此不要分配所有物理内存

  • 然后,添加内存分配率

    NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

这意味着内存将以此速率增加。您应该小心,因为如果您的负载生成在开始时非常高,则可能需要增加。请记住,如果范围太宽,它将在JVM内部分割堆空间。如果是这样垃圾收集器需要更加努力地进行清理。

  • JMeter是Java GUI应用程序。它还具有非GUI资源(CPU / RAM)。如果我们在非GUI模式中运行Jmeter,它将消耗更少的资源,我们可以运行更多的线程。

  • 在测试运行期间禁用所有监听器。它们仅用于调试并使用它们来设计所需的脚本。

听众应在加载测试期间停用。启用它们会导致额外开销,这会占用测试中更重要元素所需的宝贵资源(更多内存)。

  • 始终尝试使用最新软件。保持Java和JMeter的更新。

  • 不要忘记,在存储请求和响应标头时,断言结果和响应数据会消耗大量内存!所以尽量不要将这些值存储在JMeter 上,除非绝对必要

此外,您需要监控您的计算机的 Memory consumption CPU usages 是否正在运行低于80%与否。如果这些用法超过80%,则认为这些测试与报告一样不可靠。

完成所有这些操作后,如果您无法从计算机生成1000个主题,则必须尝试使用​​Distributed Load Testing

以下是JMeter Distributed Testing Step-by-step的文档。

为了更好,更详细地理解这两个博客How many users JMeter can support?9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure必须提供帮助。

我还发现这个article非常有助于理解以及如何处理它们。

答案 1 :(得分:1)

错误是由于缺少可用RAM。

查看您的硬件,似乎您无法产生1k用户的负载,因此我建议您重新考虑您的方法。

例如,您预计会有1000个并发用户使用您的应用程序。但是,它并不一定意味着100个并发用户:

  • 真正的用户不会不停地锤击应用程序,他们需要一些时间来“思考”操作之间,这种“思考时间”因应用程序性质而异,但你应该尽可能接近现实
  • 应将应用程序响应时间添加到思考时间

因此,假设您有1000个用户,他们每个人“认为”操作之间的10秒和应用程序响应时间是2秒,每个用户将能够每分钟发送5个请求(60 /(10 + 2))。

假设上述情况,1000个用户每分钟会发送5000个请求,这样我们每秒 ~83个请求,这似乎可以通过您当前的硬件实现。

因此,如果您无法使用更强大的硬件或更多类似的计算机来使用JMeter in distributed more,则选项包括:

答案 2 :(得分:0)

您的问题是由于使用了3​​2位操作系统,在此模式下,您可以分配为Heap(取决于操作系统,您将无法超过1.6到2.1 g)和本机线程创建。 / p>

我建议切换到64位OS + 64位Jdk。

但如果您没有其他选择,请尝试在JVM_ARGS中设置jmeter.sh:

  

-Xss128k

或者如果太低:

  

-Xss256k