Mei*_*Mei 34 apache-2.2 benchmark
我环顾四周,根本找不到对输出的任何详细说明。大多数确实很容易理解,但有一个部分让我感到困惑:
Time per request: 109537.505 [ms] (mean)
Time per request: 109.538 [ms] (mean, across all concurrent requests)
Run Code Online (Sandbox Code Playgroud)
这意味着 - 对我来说 - 如果您测量所有并发请求(无论这意味着什么),那么请求会突然以 100 倍的速度返回。为什么每个请求的时间会发生如此大的变化?这没有任何意义。
ab 输出的这个部分和其他部分有没有详细的解释?
Kar*_*zak 57
如果您将并发设置为 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)
Run Code Online (Sandbox Code Playgroud)
这意味着一个接一个执行 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)
Run Code Online (Sandbox Code Playgroud)
这次我们只需要 0.730 秒即可完成工作,而不是 3.912 秒。我们在 0.730 秒内执行了 1000 个请求,因此一个请求平均需要 0.730 秒 / 1000 = 0.730 毫秒(最后一行)。但情况有点不同,因为我们现在同时执行 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)
Run Code Online (Sandbox Code Playgroud)
意味着如果单个请求是唯一被执行的请求,它的运行速度会更快-c 1。如果有多个请求-c 10争用资源,则单个请求将需要更长的时间才能完成。但是如果你考虑到你同时执行 10 个这样的请求,在这 7.303 毫秒内你处理 10 个请求而不是 1 个。
因此,作为单个请求的延迟度量- 7.303 毫秒更有用。但作为性能的衡量标准- 0.730 毫秒更有意义。事实上,当 0.730 ms < 3.912 ms 时,您会看到如果您允许 10 个并发请求,您将能够在聚合上每秒处理更多请求。