HTTP 压测工具 wrk2 安利指南

栏目: Lua · 发布时间: 7年前

内容简介:最近的工作一直在与服务端性能优化打交道,QPS(每秒查询率)的苛刻要求让我这个以前也就用 node.js 写写博客的人深刻地感觉到以前做的东西就是个玩具。所以最近也在尝试了解一些压测方面的知识。对于压测工具,业界常用的有 jmeter、loadrunner、tcpcopy、apache bench、wrk(2) 等。作为压测小白,结合项目实际情况(无需硬件监控、测试请求较简单),在这里选择了上手使用wrk2 基于对 url

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

wrk 简介

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

$ 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 的压测,可表示如下:

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
复制代码

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

自定义脚本功能

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

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

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 满满的崇敬之情,哈哈。

完。

本文首发于我的博客(点此查看),欢迎关注。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具