ab 与 wrk 比较

线程数

  • 根据 ab 的 wiki,ab 只有一个线程运行。这可能会是压测请求的瓶颈。
  • 而 wrk 可以根据 -t <thread-number> 来设置使用多少个线程发请求,又因为每个请求都是不阻塞线程的,所以一般线程数设置为 cpu 核数即可。
    • 因为 wrk 借用了 redis 的 ae 实现,参见源码,利用 epoll 等 IO 多路复用技术来实现非阻塞线程的请求。

keep-alive

  • ab 需要使用 -k 参数来开启,默认关闭。
  • wrk 默认是开启 keep-alive 的,根据这个 issue 可知。

keep-alive 的开启与否,会很大影响到 QPS 结果。

默认配置

  • ab
    • 超时时间 -s 默认 30 秒;
    • 持续时间 -t 默认无限制;
  • wrk
    • 超时时间 -T 默认 2 秒;
    • 持续时间 -d 默认 10 秒;
    • 线程 2 个;
    • 并发数 10 个;
    • 参见源码

建议每次都根据自己的情况设置持续时间与超时时间。

ab 需要把地址写完整,比如不能是 http://localhost:8080,得是 http://locahost:8080/