JMeter 日志中的请求和线程理解

Requests and Threads understanding in JMeter logs

我仍然对此处显示的一些 JMeter 日志感到困惑。有人可以给我一些启发吗?

下面是 JMeter 为我的测试生成的日志。

Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary +      1 in 00:00:02 =    0.5/s Avg:  1631 Min:  1631 Max:  1631 Err:     0 (0.00%) Active: 2 Started: 2 Finished: 0
summary +    218 in 00:00:25 =    8.6/s Avg:   816 Min:   141 Max:  1882 Err:     1 (0.46%) Active: 10 Started: 27 Finished: 17
summary =    219 in 00:00:27 =    8.1/s Avg:   820 Min:   141 Max:  1882 Err:     1 (0.46%)
summary +     81 in 00:00:15 =    5.4/s Avg:   998 Min:   201 Max:  2096 Err:     1 (1.23%) Active: 0 Started: 30 Finished: 30
summary =    300 in 00:00:42 =    7.1/s Avg:   868 Min:   141 Max:  2096 Err:     2 (0.67%)
Tidying up ...    @ Fri Jun 09 04:19:15 IDT 2017 (1496971155116)

此日志是否意味着 [最后一步] 触发了 300 个请求,整个测试耗时 00.00:42 秒,触发了 7.1 threads/sec 或 7.1 requests/sec?

如何确保提高TPS?相同的测试是在不同的站点进行的,他们在同一台服务器上进行相同的测试时获得了 132TPS。有人可以对此有所了解吗?

在这里,请求总数为 300。吞吐量为每秒 7 个请求。这 300 个请求由您在线程组配置中给定数量的线程生成。您还可以在日志结果中查看活动线程数。这些线程是否激活取决于您的启动时间。

加速时间是用户或线程到达您的应用程序的速度。

查看示例:

您可以在脚本中提供足够的持续时间,并永远检查循环计数,这样所有线程都会在您的应用程序服务器中触发这些请求,直到测试完成。

当服务器上的所有线程都处于活动状态时,它们将命中服务器中的那些请求。

要增加 TPS,您必须增加线程数,因为这些线程将满足您在服务器中所需的请求。

这也取决于您的请求的响应时间。

假设,

  1. 如果您有 500 个虚拟用户并且应用程序响应时间为 1 秒 - 您将有 500 RPS

  2. 如果您有 500 个虚拟用户并且应用程序响应时间为 2 秒 - 您将有 250 RPS

  3. 如果您有 500 个虚拟用户并且应用程序响应时间为 500 毫秒 - 您将有 1000 RPS。

首先,一点理论:

  • 您有 Sampler(s) 应该模仿真实的用户操作
  • 您在 Thread Group 下定义了模仿真实用户的线程(虚拟用户)
  • JMeter 启动 threads 以尽可能快的速度执行 samplers 并生成一定数量的 每秒请求数。此 "request per second" 值取决于 2 个因素:

    • 虚拟用户数
    • 您的应用程序响应时间

JMeter Summarizer doesn't tell the full story, I would recommend generating the HTML Reporting Dashboard 来自 .jtl 结果文件,它将提供更全面的负载测试结果数据,更容易通过表格和图表进行分析,可以像这样简单地完成:

jmeter -g /path/to/testresult.jtl -o /path/to/dashboard/output/folder

查看当前结果,您实现了 7.1 请求 秒的最大吞吐量,平均响应时间为 868 毫秒。

因此,为了拥有更多 "requests per second",您需要增加 "virtual users" 的数量。如果您增加虚拟用户的数量并且 "requests per second" 没有增加 - 这意味着您确定了所谓的 saturation point 并且您的应用程序无法处理更多。