掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

HTTP 压力测试工具 wrk

简介


wrk 是一个HTTP压力测试工具,根据官方的介绍,他有2个明显的特点:

  1. 集成了多线程设计与事件通知系统(如 epoll、kqueue)提升并发量
  2. 可以通过编写 Lua 脚本来进行扩展,例如 HTTP请求的生成、响应处理、自定义报告 ……

使用示例


安装


wrk 可以工作在 Linux 或 Mac

项目地址:

https://github.com/wg/wrk

下载后进入项目目录,执行:

make

编译完成后,在当前目录中生成一个 wrk 可执行文件 

运行


执行测试命令:

./wrk  -t12 -c100 -d10s http://www.baidu.com

意思是对 baidu.com 进行测试,启动 12 个线程,100 个并发,持续运行 10 秒。

建议线程数不要过多,可以设置为核数的2到4倍

输出:


Requests/sec 就是最基本的指标:每秒处理的请求数

Thread Stats 是线程执行情况,包括延迟、每秒处理个数,其中的 Avg 和 Max 很好理解,是平均值和最大值,Stdev 是标准差。

标准差 表示样本数据的离散程度。

例如两组数据 {0,5,9,14} 和 {5,6,8,9},平均值都是 7,但第二个具有较小的标准差,说明更加稳定。

所以,如果多次测试结果中的 Stdev 差距较大,说明有可能系统性能波动很大。

+/- Stdev 这个正负标准差的含义不是很理解,请明白的朋友留言指点。

结合脚本


通过脚本,可以方便的进行自定义功能的开发,例如 提交POST数据、所有请求执行完成后自定义统计结果、对多个URL进行复合测试 ……

wrk 项目中的 scripts 目录下有多个脚本示例,例如 post.lua,设置post请求,代码:

-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header

wrk.method = "POST"
wrk.body   = "foo=bar&baz=quux"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

执行 wrk 命令时使用 -s参数来加载脚本

./wrk  -t12 -c100 -d10s --script=post.lua http://www.baidu.com

wrk 提供的几个hook函数:

  • setup

所有 thread 生成之后,在被被调用前,每个线程执行一次这个函数

  • init

每次请求发送之前调用

  • delay

请求之间的延迟时间

  • request

可以在每次请求之前修改request的属性

  • response

对每次的响应信息进行处理

  • done

所有请求执行完成后调用

性能与架构.jpg

原文来自:性能与架构

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

0512-88869195
数 据 驱 动 未 来
Data Drives The Future