南京网站如何制作,建设银行海门支行网站,广州市网站建设企业,wordpress富文本编辑器一、Wrk简介
wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计#xff0c;并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外#xff0c;用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。 …一、Wrk简介
wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。
二、Wrk安装 wrk仅支持Linux和Unix系列并不支持Windows Clone wrk
git clone https://github.com/wg/wrk.git编译安装
cd wrk; make; cp wrk /usr/local/bin3.验证安装
wrk --helpUsage: 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)-c 与服务器建立并保持的TCP连接数其实就是并发数
-d 压测的持续时间单位为秒默认为 10s
-t 压测的线程数。正常设置为cpu核心线程数的2-4倍即可。如果线程数过多会因线程上下文切换频繁影响到压测效果
-s 指定Lua脚本路径。可以通过Lua脚本实现复杂请求
-H 指定请求的 HTTP Header
--latency 压测结束后打印响应时间统计消息
--timeout 请求超时时间
-v 版本信息
三、Wrk实战压测实战
Get请求
wrk -t32 -c5000 -d60s --timeout 30s --latency https://www.baidu.com/Running 1m test https://www.baidu.com/32 threads and 5000 connectionsThread Stats Avg Stdev Max /- StdevLatency 6.59s 5.02s 29.57s 79.01%Req/Sec 5.14 4.82 36.00 83.11%Latency Distribution50% 4.91s 75% 8.24s 90% 13.38s 99% 25.42s 4677 requests in 1.00m, 51.98MB readSocket errors: connect 40, read 0, write 0, timeout 27
Requests/sec: 77.82
Transfer/sec: 0.86MBa、 Thread Stats 线程统计包括响应时间以及请求时间
Latency响应时间有平均值、标准偏差、最大值、正负一个标准差占比。
Req/Sec每个线程每秒完成的请求数, 同样有平均值、标准偏差、最大值、正负一个标准差占比。
b、 Latency Distribution 响应时间分布
50%50% 的响应时间为4.91s。
75%75% 的响应时间为8.24s 。
90%90% 的响应时间为13.38s
99%99% 的响应时间为25.42s。
c、 4677 requests in 1.00m, 51.98MB read 1m 完成的总请求数4677和数据读取量51.98MB
d、 Socket errors: connect 40, read 0, write 0, timeout 27 错误统计会统计 connect 连接失败请求个数40个、读失败请求个数、写失败请求个数、超时请求个数27个。
e、 Requests/sec: 77.82 每秒请求数为77.82QPS
f、 Transfer/sec: 0.86MB 平均每秒读取0.86MB数据TPSGet请求非常简单不做过多赘述。
2.Post请求【重点】
编写执行Post请求的lua脚本
--vim post.luawrk.method POST
wrk.body {\gaid\:\96a940e6-ada5-4e13-9efb-e444610240cf\,\ip\:\195.16.186.34\,\ua\:\4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)\}
wrk.headers[Content-Type] application/json
response function(status, headers, body)print(body) --调试用正式测试时需要关闭因为解析response非常消耗资源
endPs:划重点这里网上几乎都是错误的教程错在将写成 wrk.body ‘{“gaid”:“96a940e6-ada5-4e13-9efb-e444610240cf”,“ip”:“195.16.186.34”,“ua”:“4.10.0 (Linux; U; Android 13; 23021RAAEG MIUI/V15.0.14.0.TMTMIXM) (mipicks; 4003085; 2536)”}’ 实际上需要对Body体的Json进行转义并且双引号引用 调用post.lua脚本进行压测调用
wrk -t 16 -c 100 -d 30s --latency --timeout 5s --scriptpost.lua http://10.90.34.194:8080/v1/click/boosted四、Wrk总结
总体使用起来非常简单需要注意的就是执行Post请求压测的时候一定要把lua脚本中的wrk.body写正确不然被压测Server是取不到Body直接报错的。
五、扫码关注 发现精彩内容