线程和迭代次数如何影响测试以及 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 consumption
、CPU 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 的最大值是多少。线程限制的主要内容,如果未能解决你的问题,请参考以下文章