资讯动态

wrk使用 压力测试使用心得(详细)

发布时间:2026/10/24 1:01:00 来源:尧图企业网站定制
wrk是一种现代HTTP基准测试工具能够在单个多核CPU上运行时产生大量负载。它结合了多线程设计和可扩展的事件通知系统如epoll和kqueue以及使用了redis的ae事件循环可以用很少的线程压出很大的并发量。一、wrk下载和安装可以从github上下载wrk源码如果没有git可以百度安装一下。wrk是在服务器上执行的压测工具所以需要在服务器上安装1.window系统打开git窗口在目录中使用此命令下载wrk(如果服务器中有git则在服务器中使用此命令下载即可)git clone https://github.com/wg/wrk.git wrk2.把下载下来的wrk文件夹打个压缩包打开连接linux服务器的工具如Xshell,在服务器上创建一个存放wrk文件和测试用的文件的文件夹3.进入创建的文件夹后使用rz 命令上传wrk压缩包然后解压4.解压后进入wrk文件夹使用make命令编译cd wrkmake5.编译成功后会在项目路径下生成可执行文件wrk随后就可以使用了。也可以拷贝到/usr/local/bin这样就可以在任何路径直接使用wrk了。ln -s /xxx/xxx/wrk /usr/local/bin6.输入wrk,如果有以下显示则说明安装成功了二、压力测试1、最简单的压力测试示例get请求固定url固定参数wrk -t10 -c30 -d 2s -T5s --latency http://www.baidu.com注意我这里试的粘贴过去会有问题建议手敲一下参数释义-t需要模拟的线程数-c需要模拟的连接数-d测试的持续时间----timeout 或 -T超时的时间--latency显示延迟统计-s 或 --script: lua脚本,使用方法往下看-H, --header: 添加http header, 比如. User-Agent: wrk测试结果测试结果解析Running 2s test http://www.baidu.com10 threads and 30 connections平均值 标准差 最大值 正负一个标准差占比线程统计 Thread Stats Avg Stdev Max /- Stdev响应时间 Latency 168.45ms 265.72ms 1.48s 87.68%每线程每秒完成请求数Req/Sec 25.78 26.22 120.00 86.55%Latency Distribution 延迟统计50% 31.15ms 有50%的请求执行时间是在31.15ms内完成75% 243.14ms 有75%的请求执行时间是在243.14ms内完成90% 479.94ms 有90%的请求执行时间是在479.94内完成99% 1.31s 有99%的请求执行时间是在1.31s内完成365 requests in 2.01s, 5.55MB read 2秒执行了365个请求读了5.55MB数据Socket errors: connect 29, read 2, write 0, timeout 0 错误 连接错误29 读错误2Requests/sec: 182.02 每秒请求数也就是QPSTransfer/sec: 2.77MB 每秒钟读取2.77兆数据量复杂一些的一些则需要用到lua脚本lua脚本学习可看此地址 Lua 教程 | 菜鸟教程执行命令为 wrk -t5 -c10 -d 1s -T5s --latency -s test1.lua http://www.baidu.com-s test1.lua 则是执行lua脚本2.wrk发post请求执行命令为 wrk -t5 -c10 -d 1s -T5s --latency -s test1.lua http://172.18.11.11/queryUserByNamelua脚本为body中是参数 ,headers一般不用传看个人需要request function()headers {Connection keep-alive}body name中文return wrk.format(POST,path,headers,body)end3.wrk发送随机参数-get执行命令为 wrk -t5 -c10 -d 1s -T5s --latency -s test1.lua http://www.baidu.comrequest function() num math.random(1000,9999) path /test.html?t .. num return wrk.format(GET, path) endpath这个字符串会拼到 http://www.baidu.com 后wrk.format这个方法简介根据参数和全局变量wrk生成一个http请求函数签名: function wrk.format(method, path, headers, body)method:http方法,比如GET/POST等path: url上的路径(含参数 如 /index, /index?namexiaomingid123headers: http header请求头body: http body参数4.wrk从文件中依次选择参数适用于用多条固定的参数测试先在执行脚本同级目录下创建一个文件例如ids.txt文件内容为123执行命令为 wrk -t5 -c10 -d 1s -T5s --latency -s test1.lua http://www.baidu.comlua脚本文件内容为idArr {} falg 0 function init(args) for line in io.lines(ids.txt) do print(line) idArr[falg] line falg falg 1 end falg 0 end request function() local path /getInfo?id%s parms idArr[falg%(table.getn(idArr) 1)] path string.format(path,parms) falg falg 1 return wrk.format(nil, path) end会把取到的值拼到 http://www.baidu.com后其中for line in io.lines(ids.txt) do //io.lines是从ids.txt中取一行数据print(line)idArr[falg] linefalg falg 1endtable.getn是获取集合的长度wrk.format方法上面有介绍5.wrk传中文如果要传的参数中有中文则需要转码lua脚本如下需要加入encodeParm方法中文参数调用其转码idArr {}falg 0function init(args)for line in io.lines(ids.txt) doprint(line)idArr[falg] linefalg falg 1endfalg 0endfunction encodeParm(s)s string.gsub(s,([^%w%.%-]),function(c) return string.format(%%%02X,string.byte(c))end)print(string.gsub(s, ,))return string.gsub(s, ,)endrequest function()local path /user/identitySelect?name%sparms idArr[falg%(table.getn(idArr) 1)]parms encodeURL(parms)path string.format(path,parms)--path encodeParm(path)falg falg 1print(path,path)return wrk.format(nil, path)end6.发送多个请求执行命令为 wrk -t5 -c10 -d 1s -T5s --latency -s test5.lua http://www.baidu.comlua脚本为init function(args)local r {}r[1] wrk.format(nil, /info/getInfoById?id100001channel0)r[2] wrk.format(nil, /info/getByName?nameaaastartindex0length10)r[3] wrk.format(nil, /info/getByUserId?id88888888)req table.concat(r)endrequest function()return reqend7.lua声明周期共有三个阶段启动阶段运行阶段结束阶段启动阶段function setup(thread) wrk会在线程初始化但还没有启动的时候调用setup(thread)方法。且每个线程都会调用一次并传入测试线程的对象thread作为参数。thread.addr 设置请求需要打到的ipthread:get(name) 获取线程全局变量thread:set(name, value) 设置线程全局变量thread:stop() 终止线程运行阶段function init(args) -- 每个线程都会先调用1次其中可以做一些初始化工作比如读测试数据function delay() -- 每次请求调用1次发送下一个请求之前的延迟, 单位为msfunction request() -- 每次请求调用1次返回http请求function response(status, headers, body) -- 每次请求调用1次返回http响应如有不当之处还望指出

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑