内容简介:最近的工作一直在与服务端性能优化打交道,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 满满的崇敬之情,哈哈。
完。
本文首发于我的博客(点此查看),欢迎关注。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 看板工具 wekan 完全使用指南
- 免费逆向工程工具Ghidra指南
- 性能分析工具SkyWalking插件开发指南
- Xcode调试工具Instruments指南 - CSDN博客
- Go 包管理工具 govendor 使用指南
- iOS 自动化测试标签生成工具接入指南
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理必懂的技术那点事儿:成为全栈产品经理
唐韧 / 电子工业出版社 / 2018-1 / 59
《产品经理必懂的技术那点事儿:成为全栈产品经理》以非技术背景产品经理学习技术为主题,将技术知识以简单并且易于理解的方式讲述出来,帮助非技术背景产品经理了解技术、学习技术,旨在帮助产品经理高效地与技术人员进行沟通与合作,避免不懂技术带来的困扰。 《产品经理必懂的技术那点事儿:成为全栈产品经理》主要内容围绕产品经理需要了解的互联网基础技术知识展开,涉及客户端、服务器端、数据库及一些数据处理知识。......一起来看看 《产品经理必懂的技术那点事儿:成为全栈产品经理》 这本书的介绍吧!