zoukankan      html  css  js  c++  java
  • 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

    所有请求执行完成后调用

  • 相关阅读:
    35 个 Java 代码性能优化总结
    P4172 [WC2006]水管局长(LCT)
    P4219 [BJOI2014]大融合(LCT)
    P1501 [国家集训队]Tree II(LCT)
    P4381 [IOI2008]Island(基环树+单调队列优化dp)
    P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)
    P3809 【模板】后缀排序
    P3813 [FJOI2017]矩阵填数(组合数学)
    P2147 [SDOI2008]洞穴勘测(LCT)
    P3924 康娜的线段树(期望)
  • 原文地址:https://www.cnblogs.com/duanxz/p/2889500.html
Copyright © 2011-2022 走看看