我正在使用 ab 对我的服务器进行负载测试。当我将并发数从 1 增加时,每秒请求数会增加。我还看到每个请求的时间(平均值)增加,而每个请求的时间(所有并发线程的平均值)减少。但是,一旦并发数超过某个数字,每秒请求数就会保持不变,每个请求的时间(平均值)会随着并发数线性增加,而每个请求的时间(所有并发线程的平均值)保持不变。
我该如何解释这个结果?每个请求的延迟是否真的在增加?为什么每秒请求数保持不变?这是否意味着服务器正在排队请求并以恒定的速率一个接一个地提供服务?ab 是否只是通过查看总耗时、并发线程数和总请求数来计算每个请求的时间?
答案1
听起来您的服务器已经达到了每秒最大请求数和每个请求的时间(实际上是互相倒数)。
假设每秒最多有 100 个请求。
如果您的并发量为 200 个请求,则意味着(例如)4 秒后,您将收到 200 个请求。服务器每秒仅响应 100 个请求,并且每次响应后,客户端都会发出新请求(以使正在进行的请求总数恢复到 200)。这意味着每个请求将需要 2 秒(大约/平均)才能获得响应,因为服务器实际上在实际可以处理的 100 个请求之后积压了 100 个请求。
如果将并发性增加到 400,则不会改变服务器每秒可以处理的请求数,但会改变积压的大小(变为 300),这会改变每个给定请求所需的时间(4 秒)。您每秒仍会收到 100 个响应;它们只是针对 4 秒前的请求。
如果继续增加,在某个时候,服务器将无法再维持积压。那时,您可能会开始看到一些失败的请求。不过,您拥有的工具可能无法达到这一水平。