Apache Ab:请解释输出


31

我环顾四周,根本找不到输出的任何详细说明。多数确实很容易理解,但是有一部分使我困惑:

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

对我来说,这意味着,如果您对所有并发请求进行度量(无论这意味着什么),那么这些请求突然返回的速度会快100倍。为什么每个请求的时间会有如此大的变化?这是没有道理的。

关于此输出以及ab输出的其他部分是否有任何详细说明?

Answers:


53

如果您将并发设置为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)

这意味着需要3.912秒才能一次执行1000个请求。因此,单个请求平均需要3.912秒/ 1000 = 3.912 ms。

现在让我们增强并发级别:

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)

这次不是3.912秒,而是仅需0.730秒即可完成工作。我们在0.730秒内执行了1000个请求,因此一个请求平均要花费0.730秒/ 1000 = 0.730 ms(最后一行)。但是情况有所不同,因为我们现在同时执行10个请求。因此,实际上,我们的数量并没有反映完成一个请求所需的实时时间。0.730毫秒* 10(并发请求数)= 7.303毫秒 如果非并发执行(或者更正确地,以当前并发级别的隔离方式执行),则平均每个请求完成该时间。

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

7.303毫秒使您可以大致了解单个隔离请求的运行时间。

您在example -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 ms更有用。但是作为性能指标 -0.730 ms更有意义。实际上,当0.730 ms <3.912 ms时,您可以看到,如果允许10个并发请求,则每秒可以处理更多的请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.