最近在使用 ab 进行压测时,出现一个小问题:
每次请求返回的状态码都是 200,但是有大量的 failed!
排查问题
首先,查询 nginx 的 access log,我们发现压测的请求返回的都是 200。这说明我们请求没有问题
怀疑是 ab 工具问题
使用 jmeter 压测
使用 jmeter 进行压测,发现请求居然都是正确的。验证是 ab 问题
网上查询相应问题
https://stackoverflow.com/questions/6475692/investigating-apache-benchmark-failed-request
查询得到上述答案
验证
使用 man ab
查看 ab 文档,发现果然有 -l 参数
1 | -l Do not report errors if the length of the responses is not constant. This can be useful for dynamic pages. Available in 2.4.7 and later. |
意思就是说, ab 默认情况下认为返回的长度不一致就记录为 error,通过 -l 参数可以取消这种设定
1 | ab -l -n 50000 -c 50 xxxxxxxxxx |
加上参数后,可以正常压测了。