线程和迭代次数如何影响测试以及 JMeter 的最大值是多少。线程限制

Posted

技术标签:

【中文标题】线程和迭代次数如何影响测试以及 JMeter 的最大值是多少。线程限制【英文标题】:How do threads and number of iterations impact test and what is JMeter’s max. thread limit 【发布时间】:2011-04-01 12:31:49 【问题描述】:

    您能告诉我最大限制吗?我可以在 JMeter 2.4 中使用多少线程来进行负载测试?

    在一个循环中使用所有线程或使用更少的线程有什么区别吗?线程和初始化循环以实现相同的编号。用户/线程数?

例子:

No. of threads=500
Ramp up=1000
Loop=1 

是否与

相同
No. of threads=50
Ramp up=100
Loop=10

或者在结果方面有什么不同吗?

【问题讨论】:

好问题应该选择答案! 您好,您能接受最受好评的版本,即正确答案吗?它会帮助别人。谢谢 【参考方案1】:

    最大线程数由很多因素决定,看这个答案https://***.com/a/11922239/460802

    你的提议有很大的不同。

    “500 个线程,循环 1”表示 500 个线程同时执行一次循环。 “50 个线程,循环 10”表示只有 50 个线程同时执行 10 次循环。

理论上,您会得到相同数量的结果 (500),但您访问服务器的方式却截然不同。

【讨论】:

避免使用 GUI 模式。另一个选项是 cli 模式,您可以在其中将 jmeter 作为 java 进程启动并分配所需的资源。在那里,您可以在服务器模式下启动该 java 进程。这将分配运行时资源并优化垃圾回收:JVM_ARGS="-Xms5062m -Xmx26000m -XX:NewSize=5062m -XX:MaxNewSize=5062m" && export JVM_ARGS && java -server -jar ApacheJMeter.jar -n -t【参考方案2】:

最大用户数取决于您的操作系统、可用 RAM 和连接。 Win XP 同时限制为 3000 个进程。在Linux上超过3000,但我不知道多少。小心你测试服务器,如果你在你的机器上启动 3000 个线程需要大量资源并且测试不会是真实的。我希望每台机器最多启动 300 个用户。如果您想增加用户数量而不是使用分布式测试(使用更多机器作为 DoS 攻击)。 理论上是请求数相同但时间复杂度不一样。

【讨论】:

【参考方案3】:

1:当然这在很大程度上取决于运行 JMeter 的机器,但如果里程数我可以给你一些提示。 JMeter 允许您在同一个盒子中运行多个进程,并且通常非常可靠地为每个 JMeter 实例生成多达 200 个线程。如果您需要更多,我建议使用多个 JMeter 实例。一台经过一些调整的现代机器可以轻松生成 500 到 1000 个线程。使用 Linux,您可能需要增加文件描述符的最大数量 (see here)。

在没有 GUI 的情况下运行 JMeter 非常有帮助,将报告/图形数据写入文件以供稍后呈现。您还必须注意您的网络限制。 Gbps 网络中的服务器很容易生成数千个请求,但共享 54 Mbps 路由器的笔记本电脑会受到更多限制。尝试将您与服务器的实际连接除以请求的大小,然后您就会知道带宽是否会限制您。请特别注意 JMeter 的配置是否下载 html 响应中引用的文件。

希望我能提供帮助。

2:这正是 BlackGaff 解释的: “500 个线程,循环 1”表示 500 个线程同时执行一次循环。 “50 个线程,循环 10”表示只有 50 个线程同时执行 10 次循环。

【讨论】:

【参考方案4】:

    如果您的机器可以处理,我认为 JMeter 本身没有任何线程限制。测试的基本思路应该是,线程的切换和等待时间不应该对实际的性能指标有太大的影响。

    这两种情况有很大的不同。在第一种情况下,最坏的情况下,您将有 500 个并发用户。第二种情况,最大并发用户数为50。场景1的平均时间将大于场景2的平均时间。

【讨论】:

【参考方案5】:

在创建场景和测试用例后,这很常见,我们需要使用 JMeter 运行,并且我们必须修复在 JMeter 线程组中允许使用多少用户或线程的值。我们不想限制我们的负载生成器或我们的 JMeter 实例。所以基本上,在这两种情况下都需要 tweaking。否则,测试的输出将毫无价值,我们将失去几个小时我们的时间。所以这里是我们需要考虑的事情:-

JMeter 是一个与 JVM 一起运行的 Java 工具。为了获得最大的能力,我们需要在执行过程中为JMeter提供最大的资源。首先,我们需要增加堆大小(在JMeter bin目录中,我们得到jmeter.bat/sh)
HEAP=-Xms512m –Xmx512m

这意味着默认分配的堆大小最小为 512MB,最大为 512MB。根据您自己的 PC 配置进行配置。请记住,操作系统也需要一定数量的内存,所以不要分配所有物理 RAM。

然后,添加内存分配率

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

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

JMeter 是 Java GUI 应用程序。它还具有资源密集型 (CPU/RAM) 较少的非 GUI 版本。如果我们在非GUI模式下运行JMeter,它会消耗更少的资源,我们可以运行更多的线程。

禁用所有侦听器:在测试运行期间。它们仅用于调试并使用它们来设计您想要的脚本。

侦听器应在负载测试期间禁用。启用它们会导致额外的开销,这会消耗测试中更重要元素所需的宝贵资源。

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

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

所以总而言之,如果 JMeter 脚本中没有包含 Listeners,运行中的 JMeter 服务器内部没有监控,网络开销/障碍和 JMeter 脚本被优化,那么这里是一个粗略的计算:

The total number of concurrent user = (total allocable memory)/(Size of all requests)

您必须仅根据您的负载情况来估计您的并发用户/线程数(活动线程)

另外,您需要监控您的服务器 Memory consumptionCPU usages 是否在 低于 80 % 运行。如果这些使用率超过 80 %,则认为这些测试与报告一样不可靠。

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

【讨论】:

@Adnan 的答案是最好的答案),但作为一个参考,我在 AWS 的 m4.2xlarge 上运行了 1000 个并发线程,毫不费力。【参考方案6】:

Jmeter 中的线程执行没有限制。由于它是一个基于 java 的工具,它使用 java 线程功能。在并发线程执行的情况下,我们需要注意机器配置(即内存大小和 CPU)。

为了避免OutOfMemory 问题,请尝试在NON-GUI 模式下运行jmeter,并在apache-jmeter/bin/jmeter 内的jmeter 脚本中使用自定义java 运行时参数。 默认为 512 MB。

【讨论】:

以上是关于线程和迭代次数如何影响测试以及 JMeter 的最大值是多少。线程限制的主要内容,如果未能解决你的问题,请参考以下文章

jmeter中的参数化

jmeter之网站性能测试

Jmeter性能测试3-性能测试常见指标

如何确定连接错误是由于测试还是主机造成的

jmeter接口测试(登录注册)

jmeter-线程组