前言:

      以前一说到http的压力测试工具,多数人会说 ab、webbench、siege。 但这些工具不管是性能还是复杂度已经不能满足我们的需求了。 其实我从16年就开始接触wrk压力测试工具,先前使用的方法比较简单粗暴,那你可以想象的出来,用wrk只是为了更好的获取吞吐。

     apache httpd 的ab有什么缺点么?  性能 !!!!  wrk 使用了相当成熟的redis的ae事件库,避免了造轮子,事件库可以减少ab的大量线程的创建开销和调度开销.  另外他的httpparser也相当的优秀.  吹捧完了,总之,用wrk就对了。

     为什么这次又突然谈起了wrk,  因这周要上线一个cdn的管理系统,我临时使用了python写了个测试脚本,发现压力上不去,作为压力脚本输出不给力,cpu吃的倒是挺多….  这时候又突然想起了wrk这个暴力压测利器。 wrk有个更牛叉的特性就是支持自定义的lua脚本,像往常的压力测试工具,我们只是发起固定的请求,请求体是无法改变的。 但是wrk lua脚本不仅是可以做鉴权签名,可以改变请求体,模拟延迟,通过请求的返回值做些收尾。

该文章后续仍在不断更新中, 请移步到原文地址  http://xiaorui.cc/?p=5098

使用说明

wrk的安装我就不多说了,直接git拉下来,make就完事了。 wrk 已经不需要指定luajit了,默认会集成一份的。  show下wrk的用法,单纯从参数来说,确实没有ab那么丰富。

wrk的生命周期

wrk 可以在lua脚本里添加下面的Hook函数,你可以想象成生命周期,每个生命周期做的事情都不一样, 但是生命周期是有时间顺序的。我们常用一般是 request 和 delay 周期. 

wrk的使用案例

下面放一个我用到的构建 request 例子,针对一个接口压力测试,请求体的某个字段不能重复,要随机。

那么response hook怎么用? wrk每次通过request构建请求,当http返回报文时,wrk会回调 response hook方法。

中间遇到一个wrk的报错信息,  incomplete request at 1:1 ,这个问题是由于request方法没有return wrk引起的。

wrk官方也提供了一些例子https://github.com/wg/wrk/tree/master/scripts,   但都很简短,能不能来点说明,敢不敢来点文档。

END



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

评论已关闭。