我的情景,
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
请给我一个解决方案。
谢谢, 瓦拉默。
答案 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)
您的问题是由于使用了32位操作系统,在此模式下,您可以分配为Heap(取决于操作系统,您将无法超过1.6到2.1 g)和本机线程创建。 / p>
我建议切换到64位OS + 64位Jdk。
但如果您没有其他选择,请尝试在JVM_ARGS中设置jmeter.sh:
-Xss128k
或者如果太低:
-Xss256k