HTTP 压测工具 wrk2 安利指南

最近的工做一直在与服务端性能优化打交道,QPS(每秒查询率)的苛刻要求让我这个之前也就用 node.js 写写博客的人深入地感受到之前作的东西就是个玩具。因此最近也在尝试了解一些压测方面的知识。对于压测工具,业界经常使用的有 jmeter、loadrunner、tcpcopy、apache bench、wrk(2) 等。做为压测小白,结合项目实际状况(无需硬件监控、测试请求较简单),在这里选择了上手使用 wrk2。本文记录了使用过程当中的一些心得体会。html

wrk 简介

wrk2 基于 wrk 进化而来,咱们能够先了解一下 wrk 的使用。wrk 类型上与 apache bench(如下简称 ab)相似,都是终端上的工具,其使用多线程设计来进行请求的生成。相比 ab,wrk 最值得称道的应该是它的自定义脚本功能:wrk 支持使用 lua 脚原本进行 HTTP 请求生成、响应处理以及自定义压测报告等。
在基本的配置项上 wrk 也很是简单:node

$ wrk
wrk 4.1.0 [kqueue] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>
  Options:
    # HTTP 链接数
    -c, --connections <N>  Connections to keep open
    # 测试持续时间,如 2s 2m 2h
    -d, --duration    <T>  Duration of test
    # 开启的线程数
    -t, --threads     <N>  Number of threads to use
    
    # 进阶功能,使用 lua 脚本
    -s, --script      <S>  Load Lua script file
    
    # 添加请求头,如 "User-Agent: wrk"
    -H, --header      <H>  Add header to request
    
        # 打印详细延迟统计
        --latency          Print latency statistics
        
        # 设置请求超时时间,大于该时间的请求将被记录
        --timeout     <T>  Socket/request timeout

对 url http://127.0.0.1:8080/index.html 进行开启 12 个线程,打开 400 个 HTTP 链接,持续 30s 的压测,可表示以下:git

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

压测结束后产出的报告内容也还比较详细,都是一些压测方比较关心的数据,好比延迟分布、QPS 等,这里就不过多赘述。github

自定义脚本功能

若是 wrk 常规的功能没法知足需求,那么这时就须要用户自行编写脚本去进行处理。wrk 官方提供了一些示例脚本以供参考。固然首先咱们要掌握基本的 lua 语法,而后须要参考 wrk 暴露出的 lua 接口。wrk 在 setup、running、done 三个声明周期内暴露了许多方法,分别用于线程的配置、请求和响应的处理以及自定义展现最终生成的测试报告。结合脚本,wrk 可以完成至关程度的复杂压测需求。不少 wrk 的教程对此处并无详细说明,但我的认为这里才是 wrk 的精华所在。若是想熟练上手使用,应当对自定义脚本的使用有所了解。shell

例如,若是想对每一个请求增长必定延时,可在 wrk 暴露出的 delay 函数中进行设置:apache

function delay()
   return math.random(10, 50)
end

或者你想对 post 请求做压测,则能够对 table wrk 进行设置:性能优化

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

wrk2

wrk2 是 wrk 的进化版,其号称可以提供稳定的吞吐量以及更精确的延时统计,反映到配置参数上就是 wrk2 增长了 --rate 参数用于设置吞吐量和--u_latency 参数用于显示不正确(统计学角度)的延时统计。其余使用上 wrk2 与 wrk 区别不大,算是更加完善的工具。固然 wrk2 的做者十分谦虚,字里行间流露出对 wrk 满满的崇敬之情,哈哈。多线程

完。app

本文首发于个人博客(点此查看),欢迎关注。dom

相关文章
相关标签/搜索