wrk 压测工具使用

二维码
| Sep 01, 2020 | 原创

wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。

wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue.

安装

wrk 安装有说明 wikimacOS 安装最贴心:

brew install wrk

但在 linux 下安装没那么顺畅,官方使用的 yum 源是需要:收费的!收费的!收费的!

所以,linux 下建议使用源码直接编译:

git clone https://github.com/wg/wrk.git
cd wrk && make

使用

wrk 使用也非常简单,常用参数命令如下:

Usage: wrk <options> <url>
  Options:
    -c, --connections <N>  保持请求的连接数
    -d, --duration    <T>  压测持续时间
    -t, --threads     <N>  客户端压测并发线程数

    -s, --script      <S>  lua 脚本文件
    -H, --header      <H>  添加额外Header
        --latency          输出延迟统计数据
        --timeout     <T>  请求超时时间设置
    -v, --version          当前安装版本

  Numeric arguments may include a SI unit (1k, 1M, 1G)
  Time arguments may include a time unit (2s, 2m, 2h)

需要注意的是 -c 参数,它代表的是当前的压测连接数,而不是压测总条数,这个 ab-n 参数是不一样的。

wrk -t4 -d3m -c100 https://baidu.com

如上命令表示使用4个线程并发请求,客户端最大连接数100个,持续压测3分钟。

Post 请求压测

wrk 比较喜人的地方是,可以通过脚本的方式发送各种类型 HTTP请求,如 Post 请求,需要做的就是定义一个 lua 脚本:

-- post.lua 脚本

-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header

-- post url encoded 方式
wrk.method = "POST"
wrk.body   = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

使用该脚本只需要添加 -s 参数即可:

wrk -t4 -d3m -c100 -s post.lua https://baidu.coom

Post 还可以使用发送 Json 数据,怎么发送数据,属于 http 范畴,可自行查阅相关资料:

wrk.method = "POST"
wrk.body   = "{ \"foo\": \"bar\", \"baz\" : \"quux\" }"
wrk.headers["Content-Type"] = "application/json"

更多脚本执行方式请查看官方的 scripts 目录,已经非常全面:https://github.com/wg/wrk/blob/master/scripts/