简介wrk 是一个比较先进的 HTTP 压力测试工具,当在单个多核 CPU 上运行时,能够产生大量负载wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrk.wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等.其实它是复用了 redis 的 ae 异步事件驱动框架. 确切地说 ae 事件驱动框架并不是 redis 发明的, 它来自于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多地被大家所熟知.参考:https://blog.csdn.net/kwanson/article/details/81839805https://blog.csdn.net/qinggebuyao/article/details/17394861
ae 事件驱动源代码见redis里面的ae.c,只有400多行aeEventLoop是一个记录事件状态的结构,aeCreateEventLoop创建一个这样的结构,分配内存空间,初始化events,fired等参数需要分配内存空间的有三个指针,三个指针分别是eventLoop-结构指针;events-注册事件,fired-解除事件这三个指针内存空间任何一个分配失败的话,均跳转到err处理----释放已分配的空间并返回NULL若分配成功,则设置其他参数初始值,如setsize(最大文件描述符数量值),这个值使用aeCreateEventLoop给定的参数最后一步初始化注册事件掩码(即事件类型值),用一个for循环对setsize个事件设定默认事件类型这里的事件mask使用了AE_NONE,其值在ae.h中有预定义,ae库有三种事件类型:AE_NONE(0), AE_READABLE(1),AE_WRITABLE(2).(括号内为事件类型值)此外,这里还有个值得注意的对象,stop这是一个循环处理的一个标志(eventLoop会不停的调用aeProcessEvents),初始值为0,表示处理会一直执行直到stop标志变为1wrk的安装
#下载命令git clone https://github.com/wg/wrk.git部分服务器无法连外网,需要手动拉到本地,然后rz上去,注意拉到本地之后,打包成.tar.gztar -xvf wrk.tag.gz#切换路径到wrk目录下cd wrk#使用make命令编译环境make如无报错,复制执行命令到Linux路径cp wrk /usr/bin验证安装是否成功:wrk的基本使用
使用方法: wrk <选项> <被测HTTP服务的URL>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 -t10 -c10 -d5s --script=aaa_create.lua --latency https://www.aaa.com注意: -c 的大小要大于等于 -t--script 指的是执行脚本, --latency会显示压测执行的时间段执行截图与说明:(使用4个线程,10个连接,压测百度网站5秒的结果如下)latency举例: 90% 对应36.15ms 说明压测的90%请求在36.15msRequests/sec: 214.67 说明的是每秒的请求数 即:RTSTransfer/sec: 2.15MB 说明的每秒的读取数据大小, 即: TPSStdev: 标准差 : 【是平均差平方的算术平均数(即:方差)的算术平方根,用σ表示标准差也被称为标准偏差, 可理解为请求的最大范围是距离平均值36.03ms 的7.90ms这个区间】+/- Stdev: 正负一个标准差 【正负一个标准差涵盖了请求数的 98.64%】wrk 带脚本压测wrk天然支持lua脚本, 注意脚本路径 带在命令–script 后面即可,如下是一个简单的Lua请求脚本:对外API的签名是5分钟有效期,所以可以复制进去进行短时间的压测
wrk.method = "GET"wrk.body = "start_time=1639537008&end_time=1639537808"wrk.headers["x-alogic-now"] = "1639539125739"wrk.headers["x-alogic-app"] ="test"wrk.headers["x-alogic-signature"] = "5Utset7A"wrk.headers["x-alogic-ac"] ="app"wrk.headers["Content-Type"] = "text/html"Lua脚本的高级说明:可以去wrk文件夹下面的scripts里面去学习基础的功能,然后上网查询对应写法和实现
0 评论