wrk 是针对 Http 协议的基准测试工具,能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。
wrk是开源免费的, 代码在 github 上:https://github.com/wg/wrk
wrk的优势劣势
wrk是一款轻量级性能测试工具,安装简单,上手容易。并且基于系统自带的高性能I/O机制,通过很少的线程就可以压出很大的并发量,例如几万、几十万,这是很多性能测试工具无法做到的。
但是wrk的劣势也很明显,仅支持单机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。
wrk只能运行于 Unix 类的系统上。Mac下可以使用快捷下载安装:
brew install wrk
安装成功后,可以使用wrk --help 查看安装是否成功
LiTandeMacBook-Pro:~ litan$ wrk
Usage: wrk <options> <url>
Options:
-c, --connections <N> Connections to keep open
-d, --duration <T> Duration of test
-t, --threads <N> Number of threads to use
-s, --script <S> Load Lua script file
-H, --header <H> Add header to request
--latency Print latency statistics
--timeout <T> Socket/request timeout
-v, --version Print version details
Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)
也即wrk的参数作用,可以简单看翻译之后的内容:
使用方法: wrk <选项> <被测HTTP服务的URL>
Options:
-c, --connections <N> 跟服务器建立并保持的TCP连接数量
-d, --duration <T> 压测时间
-t, --threads <N> 使用多少个线程进行压测
-s, --script <S> 指定Lua脚本路径
-H, --header <H> 为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout <T> 超时时间
-v, --version 打印正在使用的wrk的详细版本信息
<N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)
安装成功后,直接输入参数和url运行:对百度url发起测试,线程数为 8,模拟 400 个并发请求,持续 30 S
wrk -t8 -c200 -d30s --latency https://www.baidu.com
运行完成后输出结果:
LiTandeMacBook-Pro:~ litan$
LiTandeMacBook-Pro:~ litan$ wrk -t8 -c200 -d30s --latency https://www.baidu.com
Running 30s test @ https://www.baidu.com
8 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 575.48ms 246.02ms 2.00s 80.54%
Req/Sec 37.14 16.49 101.00 61.17%
Latency Distribution
50% 534.86ms
75% 594.73ms
90% 976.88ms
99% 1.59s
8839 requests in 30.09s, 132.70MB read
Socket errors: connect 0, read 0, write 0, timeout 321
Requests/sec: 293.76
Transfer/sec: 4.41MB
LiTandeMacBook-Pro:~ litan$