资讯专栏INFORMATION COLUMN

HTTP 压测工具 wrk2 安利指南

caige / 2991人阅读

摘要:对于压测工具,业界常用的有等。类型上与以下简称类似,都是终端上的工具,其使用多线程设计来进行请求的生成。在三个声明周期内暴露了许多方法,分别用于线程的配置请求和响应的处理以及自定义展示最终生成的测试报告。

最近的工作一直在与服务端性能优化打交道,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:
    # HTTP 连接数
    -c, --connections   Connections to keep open
    # 测试持续时间,如 2s 2m 2h
    -d, --duration      Duration of test
    # 开启的线程数
    -t, --threads       Number of threads to use
    
    # 进阶功能,使用 lua 脚本
    -s, --script        Load Lua script file
    
    # 添加请求头,如 "User-Agent: wrk"
    -H, --header        Add header to request
    
        # 打印详细延迟统计
        --latency          Print latency statistics
        
        # 设置请求超时时间,大于该时间的请求将被记录
        --timeout       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 满满的崇敬之情,哈哈。

完。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34906.html

相关文章

  • [译]保持Node.js的速度-创建高性能Node.js Servers的工具、技术和提示

    摘要:本文翻译自原文地址中文标题保持的速度创建高性能的工具技术和提示快速摘要是一个非常多彩的平台,而创建服务就是其非常重要的能力之一。在目录下,我们执行译者注现在的话可以使用新的形式的命令语法会在剖析完毕后,创建文件并自动打开浏览器。 pre-tips 本文翻译自: Keeping Node.js Fast: Tools, Techniques, And Tips For Making Hi...

    Lavender 评论0 收藏0
  • 如何优雅的写一篇安利文-以Sugar ORM为例

    摘要:前言我最近喜欢把写的十分优美的技术文章叫做安利文。优雅带有很强烈的资产阶级文艺小资派气息,要习惯装的像个文青,大胆优雅的去写安利文。如果让你有了第二天自己写一篇安利文的冲动,也算这篇文章没有白写。 前言 我最近喜欢把写的十分优美的技术文章叫做安利文。首先,文章必须是原创而非软广;其次,阅读之后不仅能快速吸纳技术要点并入门开发,还能感同身受的体会作者热情洋溢的赞美和急于分享心得体验的心情...

    shevy 评论0 收藏0
  • 入门级前端开发可能需要的安利列表

    摘要:开发篇版本管理工具,无脑的视图操作,功能强大并且支持多账号点我跳转网站篇学习最重要的是经常百度,要始终坚信着你的水平能遇到的坑,别人都帮你踩过了。另外就是开发过程多看文档,很多问题文档都会有相关的解决方案,多看几次就能想到解决方法。 IDE篇 程序员最重要的的就是IDE了,一个好的IDE可以帮你省略大量的时间,以及少生很多闷气,下面开始前端的IDE推荐: VSCode 最推荐的IDE...

    Flands 评论0 收藏0
  • 入门级前端开发可能需要的安利列表

    摘要:开发篇版本管理工具,无脑的视图操作,功能强大并且支持多账号点我跳转网站篇学习最重要的是经常百度,要始终坚信着你的水平能遇到的坑,别人都帮你踩过了。另外就是开发过程多看文档,很多问题文档都会有相关的解决方案,多看几次就能想到解决方法。 IDE篇 程序员最重要的的就是IDE了,一个好的IDE可以帮你省略大量的时间,以及少生很多闷气,下面开始前端的IDE推荐: VSCode 最推荐的IDE...

    wwolf 评论0 收藏0
  • 20天持续压测,告诉你云存储性能哪家更强?

    摘要:两大产生云硬盘预期性能对比上图显示,腾讯云高效云盘的预期性能遥遥领先于阿里云,其中最低的吞吐量都比阿里云的峰值要高。 上个月,笔者对国内两大云厂商(阿里云和腾讯云)的云服务器、云数据库和云存储三种产品做了性能评测,算是对两家的部分计算和存储产品(数据库也可视作一种存储形式)做了简要对比。虽然评测文章在 V2EX 等社区的反馈还不错,但确实还存在不少缺失。除了不好评测的售后服务等指标外,...

    dabai 评论0 收藏0

发表评论

0条评论

caige

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<