性能压力测试小工具 wrk
性能测试相关名词
QPS每秒查询率 (Query Per Second)
每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
并发用户数
指系统可以同时承载的正常使用系统功能的用户的数量
吞吐量 (Throughput)
吞吐量是指系统在单位时间内处理请求的数量
响应时间 (RT)
指系统对请求作出响应的时间
wrk 是什么
wrk 是 github 的一个项目
根据官方的说明,wrk 是一个HTTP基准测试工具
当运行在单个多核CPU上时,它能够产生巨大的负载。它结合了多线程设计和可伸缩的事件通知系统,如 epoll 和 kqueue 等等
wrk 中的一个可选的 LuaJIT 脚本可以执行 HTTP 请求生成、响应处理和自定义报告
wrk 如何使用
那么 wrk 如何使用呢,我们就来实操一下看看效果 , 既然是 开源工具,下载安装编译的方式都很类似
1、下载编译
git clone https://github.com/wg/wrk.git
cd wrk
make
cp wrk /usr/local/sbin/
2、这个时候,我们就可以开始使用 wrk 工具了
# wrk
Usage: wrk <options> <url>
Options:
-c, --connections <N> Connections to keep open // 和服务器建立连接并保持的 TCP 连接数量
-d, --duration <T> Duration of test // 具体的压测时间
-t, --threads <N> Number of threads to use // 使用的线程数量
-s, --script <S> Load Lua script file // 加载 lua 文件
-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)
上面的 N 表示数字参数,可以是 1k, 1M, 1G
T 表示时间参数,可以是 2s, 2m, 2h
尝试使用 wrk 工具
我们使用 wrk 同样的参数来性能测试一下 掘金 和 百度的地址
200个链接
8个线程
测试 40 s
# wrk -c200 -t8 -d40 --latency https://juejin.cn/
Running 40s test @ https://juejin.cn/
8 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.53s 481.41ms 2.00s 87.68%
Req/Sec 10.27 7.50 70.00 73.61%
Latency Distribution
50% 1.67s
75% 1.85s
90% 1.95s
99% 2.00s
2406 requests in 40.05s, 476.65MB read
Socket errors: connect 0, read 0, write 0, timeout 1797
Requests/sec: 60.08
Transfer/sec: 11.90MB
解释上面测试报告相关字段的含义:
Latency 延迟
Avg 平均值
Stdev 标准差
+/- Stdev 标准差占比
Requests/sec 平均每秒处理的请求数,通常说的 qps 这里可以看出 掘金是 60.08
实践完毕之后,我们来捋一捋 wrk 的优势和劣势
优势:
wrk 是轻量级性能测试工具,用起来非常方便,且安装也很简单,学习成本低
根据官方介绍,我们知道 wrk 基于系统自带的高性能 I/O 机制,如 epoll, kqueue
这些机制是利用异步的事件驱动框架 多路 IO 复用来提高并发性能的
劣势:
仅支持单机压测,如果需要测试多台机器,wrk 就不合适了
Last updated