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

时间:2010-08-20 06:54:54

标签: jmeter performance-testing

  1. 请告诉我没有的最大限制。我可以在JMeter 2.4中用于进行负载测试的线程吗?

  2. 在单个循环中获取所有线程或减少不是没有任何区别。线程和初始化循环实现相同的没有。用户/线程?

  3. 示例:

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

    是否与

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

    或者结果有什么不同吗?

6 个答案:

答案 0 :(得分:21)

  1. 最大线程数由很多因素决定,请参阅此答案https://stackoverflow.com/a/11922239/460802

  2. 你提出的建议有很大的不同。

    • “500个线程,循环1”表示同时执行循环ONCE的500个线程。
    • “50个螺纹,循环10”表示只有50个螺纹在同一时间进行循环十次。
  3. 从理论上讲,你得到相同数量的结果(500),但是你以一种非常不同的方式击中了服务器。

答案 1 :(得分:9)

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

答案 2 :(得分:5)

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

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

希望我能够提供帮助。

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

答案 3 :(得分:5)

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

  • 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上。

总而言之,如果JMeter脚本中没有包含监听器,那么在运行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必须提供帮助。

答案 4 :(得分:1)

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

为避免出现OutOfMemory问题,请尝试在jmeter内的NON-GUI脚本中以自定义Java运行时参数在jmeter模式下运行apache-jmeter/bin/jmeter。 默认值为512 MB。

答案 5 :(得分:0)

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

  2. 两种情况之间存在巨大差异。在第一种情况下,最糟糕的情况是,您将拥有500个并发用户。在第二种情况下,最大并发用户数为50.方案1的平均时间将大于方案2的平均时间。