wrk简介
wrk是针对HTTP协议的压测工具,最大特点是轻量、易上手、小线程大并发。
开发原理:利用操作系统特定的高性能io机制。
wrk安装
# 从github下载
git clone https://github.com/wg/wrk.git
# 进入项目
cd wrk
# 编译
make
# 将可执行文件移动到 /usr/local/bin 位置 可直接使用wrk
sudo cp wrk /usr/local/bin
插曲1:
编译过程中出错提示:src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory
去插曲1:
原因:openssl/ssl.h 加载失败
解决方式:
# include <openssl/ssl.h>
# 安装openssl
sudo apt-get install libssl-dev
# 或者
sudo yum install openssl-devel
安装完成
wrk参数说明
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)
wrk使用
# 线程数为 5,模拟 5 个并发请求,持续 1 分钟, 请求头 "ak:test"。
wrk -t5 -c5 -d1m -H"ak:test" http://xx.xx.xx.xx:xx
# --latency 可以查看响应时间分布
# -T30s 更新超时时间限制为30s
返回
返回说明
Running 1m test @ http://xx.xx.xx.xx:xxxx (压测时间30s)
5 threads and 5 connections (共5个测试线程,5个连接)
(平均值) (标准差) (最大值)(正负一个标准差所占比例)
Thread Stats Avg Stdev Max +/- Stdev
(延迟)
Latency 427.30us 2.96ms 201.19ms 99.86%
(每秒请求数)
Req/Sec 2.92k 218.16 3.57k 73.31%
871877 requests in 1.00m, 105.60MB read (1min内处理了871877个请求,耗费流量105.60MB)
Requests/sec: 14507.24 (QPS 14507.24,即平均每秒处理请求数为14507.24)
Transfer/sec: 1.76MB (平均每秒流量1.76MB)
插曲2:
返回报错:Socket errors: connect 0, read 7909, write 8131, timeout 11
error解读:
Socket errors: connect 0, read 7909, write 8131, timeout 11
# 本次压测存在7909个读错误, 8131个写错误,11个超时
去插曲2:
原因:请求响应时间超过 wrk 的默认超时时间1秒
解决办法:增大超时时间限时,可以使用30s/60s
# -T30s 更新超时时间限制为30s
wrk -t5 -c5 -d1m -T30s -H"ak:test" http://xx.xx.xx.xx:xx