根据官方的说明,wrk 是一个HTTP基准测试工具
当运行在单个多核CPU上时,它能够产生巨大的负载。它结合了多线程设计和可伸缩的事件通知系统,如 epoll 和 kqueue 等等
wrk 中的一个可选的 LuaJIT 脚本可以执行 HTTP 请求生成、响应处理和自定义报告
wrk 如何使用
那么 wrk 如何使用呢,我们就来实操一下看看效果 , 既然是 开源工具,下载安装编译的方式都很类似
1、下载 wrk 项目
gitclonehttps://github.com/wg/wrk.gitwrk
2、编译项目
cdwrkmake
3、将编译出来的 wrk 可执行程序放到用户自己的 bin 目录下
cpwrk/usr/local/sbin/
4、这个时候,我们就可以开始使用 wrk 工具了
咱们直接执行 wrk 来看看效果
#wrkUsage:wrk<options><url>Options:-c,--connections<N>Connectionstokeepopen//和服务器建立连接并保持的TCP连接数量-d,--duration<T>Durationoftest//具体的压测时间-t,--threads<N>Numberofthreadstouse//使用的线程数量-s,--script<S>LoadLuascriptfile//加载lua文件-H,--header<H>Addheadertorequest//添加请求头--latencyPrintlatencystatistics//打印延迟统计数据--timeout<T>Socket/requesttimeout//超时时间-v,--versionPrintversiondetails//版本信息NumericargumentsmayincludeaSIunit(1k,1M,1G)Timeargumentsmayincludeatimeunit(2s,2m,2h)
上面的 N 表示数字参数,可以是 1k, 1M, 1G
T 表示时间参数,可以是 2s, 2m, 2h
尝试使用 wrk 工具
我们使用 wrk 同样的参数来性能测试一下 掘金 和 百度的地址
200个链接
8个线程
测试 40 s
先测试掘金的
#wrk-c200-t8-d40--latencyhttps://juejin.cn/Running40stest@https://juejin.cn/8threadsand200connectionsThreadStatsAvgStdevMax+/-StdevLatency1.53s481.41ms2.00s87.68%Req/Sec10.277.5070.0073.61%LatencyDistribution50%1.67s75%1.85s90%1.95s99%2.00s2406requestsin40.05s,476.65MBreadSocketerrors:connect0,read0,write0,timeout1797Requests/sec:60.08Transfer/sec:11.90MB
再测试百度的
#wrk-c200-t8-d40--latencyhttps://www.baidu.comRunning40stest@https://www.baidu.com8threadsand200connectionsThreadStatsAvgStdevMax+/-StdevLatency284.06ms332.08ms2.00s86.02%Req/Sec96.4136.69538.0079.63%LatencyDistribution50%120.17ms75%357.11ms90%730.79ms99%1.56s31088requestsin40.07s,466.95MBreadSocketerrors:connect0,read138,write0,timeout264Requests/sec:775.87Transfer/sec:11.65MB
解释上面测试报告相关字段的含义:
Latency 延迟
Avg 平均值
Stdev 标准差
+/- Stdev 标准差占比
Requests/sec 平均每秒处理的请求数,通常说的 qps 这里可以看出 掘金是 60.08 , 百度是 775.87 ,差别还是有的
实践完毕之后,我们来捋一捋 wrk 的优势和劣势
优势:
wrk 是轻量级性能测试工具,用起来非常方便,且安装也很简单,学习成本低
根据官方介绍,我们知道 wrk 基于系统自带的高性能 I/O 机制,如 epoll, kqueue
这些机制是利用异步的事件驱动框架 多路 IO 复用来提高并发性能的
劣势:
仅支持单机压测,如果需要测试多台机器,wrk 就不合适了