wrk是一个三方 HTTP 压力测试工具,当在单个多核 CPU 上运行时,能够产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如 epoll 和 kqueue。
可选的 LuaJIT 脚本可以执行 HTTP 请求生成,响应处理和自定义报告
安装:
git clone https://github.com/wg/wrk.git
cd wrk && make
从仓库拉代码可能比较慢,需要等一会儿
安装完成以后 输入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 <选项> <被测HTTP服务的URL>
Options:
-c, --connections <N> 跟服务器建立并保持的TCP连接数量
-d, --duration <T> 压测时间
-t, --threads <N> 使用多少个线程进行压测,压测时,是有一个主线程来控制我们设置的n个子线程间调度
-s, --script <S> 指定Lua脚本路径
-H, --header <H> 为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout <T> 超时时间
-v, --version 打印正在使用的wrk的详细版本信
<N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)
简单使用:
wrk -t12 -c100 -d30s https://swoole.iscgr.cn
测试结果:
[root@VM-142-222-centos wrk]# wrk -t4 -c100 -d30s http://swoole.iscgr.cn
Running 30s test @ http://swoole.iscgr.cn
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 160.54ms 195.43ms 1.24s 84.17%
Req/Sec 264.61 93.14 747.00 75.06%
31631 requests in 30.03s, 4.55MB read
Requests/sec: 1053.32
Transfer/sec: 155.28KB
参数解释:
4 threads and 100 connections
开启4个线程 100个连接(这里不是一个线程对应一个连接)
latency
和 Req/Sec
代表单个线程的统计数据,latency代表延迟时间,Req/Sec代表单个线程每秒完成的请求数,他们都具有平均值, 标准偏差, 最大值, 正负一个标准差占比。一般我们来说我们主要关注平均值和最大值
31631 requests in 30.03s, 4.55MB read
在30秒之内总共有31631个请求,总共读取4.55MB数据
Requests/sec和Transfer/sec
所有线程平均每秒钟完成了1053.32个请求,每秒钟读取155.28KB数据量
如果需要查看相应时间 在命令上增加参数 --latency
wrk -t4 -c100 -d30s --latency http://swoole.iscgr.cn
结果如下:
[root@VM-142-222-centos wrk]# wrk -t4 -c100 -d30s --latency http://swoole.iscgr.cn
Running 30s test @ http://swoole.iscgr.cn
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 165.48ms 206.58ms 1.97s 84.72%
Req/Sec 265.49 94.24 750.00 75.00%
Latency Distribution
50% 37.56ms
75% 267.43ms
90% 501.98ms
99% 801.05ms
31752 requests in 30.03s, 4.57MB read
Requests/sec: 1057.29
Transfer/sec: 155.87KB
wrk作为http压测还是非常简便的,后面再介绍下Apache 自带的压力测试工具`ab`
评论区