AB (Apache benchmarking) 的一个坑

1 阅读1分钟

使用ab进行压力测试的时候可能会得到这样一个错误:

Concurrency Level:      500
Time taken for tests:   39.001 seconds
Complete requests:      5000
Failed requests:        453
   (Connect: 0, Receive: 0, Length: 453, Exceptions: 0)
Total transferred:      11924094 bytes
HTML transferred:       10194094 bytes
Requests per second:    128.20 [#/sec] (mean)
Time per request:       3900.097 [ms] (mean)
Time per request:       7.800 [ms] (mean, across all concurrent requests)
Transfer rate:          298.57 [Kbytes/sec] received

可以很明显看到所有的 Failed requests 都是 Length 这个类别的错误,但是进行排查的时候又发现所有的请求都是正常的。原因是受测网站的这个页面是动态的内容,当第一次发出 HTTP request 与后续发出的 HTTP request 所得到回应的 HTML的长度都是不同的,也就是每次返回的 Content-Length 不一致,就会导致 Failed requests 错误,因此这类 Length 失败在进行动态网页压力测试时是合理的,可以不予理会。

ab假设响应内容的长度在整个测试期间是相同的。它会保存第 1 次取得的 Content-Length,第二次以及以后的请求所返回的Content-Length 与第 1 次的长度不一致,就会导致出现 Length 的错误。

解决方案

在进行压力测试的时候加上选项 -l。这个选项允许ab接受可变文档长度。

转载来源: wzh.one/370.html 感谢作者