Apache ab:请解释输出

Apache ab:请解释输出

我四处查看,根本找不到任何关于输出的详细解释。大部分确实很容易理解,但有一部分让我困惑:

Time per request:       109537.505 [ms] (mean)
Time per request:       109.538 [ms] (mean, across all concurrent requests)

对我来说,这意味着如果你测量所有并发请求(不管这意味着什么),那么请求的返回速度会突然提高 100 倍。为什么每个请求的时间会发生这么大的变化?这毫无道理。

有没有关于这个以及 ab 输出的其他部分的详细解释?

答案1

如果并发度设置为 1,则没有区别两者之间。当你同时执行多个请求时,它就开始变得重要了。

让我们看一个我得到的例子localhost

ab -c 1 -n 1000 http://localhost/

会给:

Time taken for tests:   3.912 seconds
Time per request:       3.912 [ms] (mean)
Time per request:       3.912 [ms] (mean, across all concurrent requests)

这意味着逐个执行 1000 个请求需要 3.912 秒。因此单个请求平均需要 3.912 秒/1000 = 3.912 毫秒。

现在让我们稍微增强一下并发级别:

ab -c 10 -n 1000 http://localhost/

Time taken for tests:   0.730 seconds
Time per request:       7.303 [ms] (mean)
Time per request:       0.730 [ms] (mean, across all concurrent requests)

这次我们只需要 0.730 秒就能完成任务,而不是 3.912 秒。我们在 0.730 秒内执行了 1000 个请求,因此一个请求平均需要 0.730 秒/1000 = 0.730 毫秒(最后一行)。但情况有点不同,因为我们现在同时执行 10 个请求。所以实际上我们这里的数字并不反映一个请求完成所需的实际时间. 0.730 毫秒 * 10(并发请求数)= 7.303 毫秒。这是单个请求以非并发方式(或更准确地说,在当前并发级别以隔离方式)执行时平均完成所需的时间。

您看到的最后一个数字(0.730 毫秒)用于告诉您如果使用-n 1001当前并发级别添加 1 个请求(),总时间大约会增加多少-c 10(至少理论上是这样)。

7.303 毫秒让您大致了解单个孤立请求的运行时间。

-c 1您在示例和之间看到的变化-c 10

[-c 1 ]: Time per request:       3.912 [ms] (mean)
[-c 10]: Time per request:       7.303 [ms] (mean)

意味着如果单个请求是唯一执行的请求,则单个请求确实运行得更快。-c 1如果有多个请求-c 10争用资源,则单个请求将需要更长时间才能完成。但是,如果您考虑到您同时执行 10 个这样的请求,那么在这 7.303 毫秒中,您要处理的是 10 个请求,而不是 1 个。

因此,作为单个请求的延迟度量- 7.303 毫秒更有用。但作为绩效衡量- 0.730 毫秒更有意义。事实上,0.730 毫秒 < 3.912 毫秒,您会发现,如果您允许 10 个并发请求,您每秒将能够处理更多请求。

相关内容