网站首页 > 开源技术 正文
简介
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/81839805
https://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标志变为1。 |
wrk的安装
#下载命令 git clone https://github.com/wg/wrk.git 部分服务器无法连外网,需要手动拉到本地,然后rz上去,注意拉到本地之后,打包成.tar.gz tar -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.15ms
Requests/sec: 214.67 说明的是每秒的请求数 即:RTS
Transfer/sec: 2.15MB 说明的每秒的读取数据大小, 即: TPS
Stdev: 标准差 : 【是平均差平方的算术平均数(即:方差)的算术平方根,用σ表示。标准差也被称为标准偏差, 可理解为请求的最大范围是距离平均值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里面去学习基础的功能,然后上网查询对应写法和实现。
猜你喜欢
- 2024-10-12 全职宝妈的我啊这肚子,阳康一过大了几圈
- 2024-10-12 佟丽娅称选手像易烊千玺,男方粉丝不干,饭圈太敏感会四面树敌吗
- 2024-10-12 马苏素颜开直播健身,穿健美裤大秀“木瓜臀”,女生都吃不下饭了
- 2024-10-12 熊黛林穿开叉礼服出席活动秀丰满上围大长腿,小肚腩却抢镜了
- 2024-10-12 周扬青林允合影曝光,“网红脸”一览无遗,网友:凡事就怕对比
- 2024-10-12 NalfWrkxfV(wfdwyxqxjf-rh)
- 2024-10-12 阿森纳VS切尔西,欧联杯冠军之争,你看好谁?是埃梅里还是萨里?
- 2024-10-12 大学生志愿者三下乡支教活动顺利开展
- 2024-10-12 他是圈内隐形低调富豪,明明家里有亿万家产,还跑龙套
- 2024-10-12 他曾建议开除岳云鹏,成名后岳云鹏最感激他,网友:男人的气度
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)