记录一个 ab 工具使用的小坑

最近在使用 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

加上参数后,可以正常压测了。