使用ab进行压力测试的时候可能会得到这样一个错误:
Complete requests: 100
Failed requests: 99
(Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Keep-Alive requests: 0
Total transferred: 213113 bytes
HTML transferred: 211705 bytes
可以很明显看到所有的 Failed requests
都是 Length
这个类别的错误,但是进行排查的时候又发现所有的请求都是正常的。原因是受测网站的这个页面是动态的内容,当第一次发出 HTTP request
与后续发出的 HTTP request
所得到回应的 HTML
的长度都是不同的,也就是每次返回的 Content-Length
不一致,就会导致 Failed requests
错误,因此这类 Length
失败在进行动态网页压力测试时是合理的,可以不予理会。
ab
假设响应内容的长度在整个测试期间是相同的。它会保存第 1 次取得的 Content-Length
,第二次以及以后的请求所返回的Content-Length
与第 1 次的长度不一致,就会导致出现 Length
的错误。
解决方案
在进行压力测试的时候加上选项 -l
。这个选项允许ab
接受可变文档长度。