使用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 感谢作者