Answers:
如果您将并发设置为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个并发请求,则每秒可以处理更多的请求。