wrk简介
wrk 是一款针对 Http 协议的基准测试开源工具,
它能够在单机多核 CPU 的条件下,使用系统的高性能 I/O 机制,
通过多线程和事件模式,对目标机器产生大量的负载。
wrk 目前仅支持单机压测,它本身的定位,并不是用来取代 JMeter 等专业的测试工具。
wrk 目前对后端开发人员来说,应付日常接口性能验证还是比较友好的。
github地址: https://github.com/wg/wrk.git
性能指标简介
延迟
一般指响应时间
-
95线:P95。平均100%的请求中95%已经响应的时间
-
99线:P99。平均100%的请求中99%已经响应的时间
-
平均响应时间:所有请求的平均响应时间
-
最大响应时间:所有请求中最大的响应时间
吞吐量
即每秒处理的请求数量
-
对于查询搜索类的系统使用每秒处理的请求数(QPS)来衡量吞吐能力。
-
一般对于交易类的系统使用每秒处理的事务数(TPS)来衡量吞吐能力。
-
TPS:每秒处理的事务数(比如每秒处理的订单数)
-
QPS:每秒处理的请求数
系统容量
也叫做设计容量,可以理解为硬件配置(内存,cpu)
安装
# ubuntu
apt-get update -y && apt-get -y install wrk
# mac 本地安装
brew install wrk
参数解析
-c, --connections: total number of HTTP connections to keep open with
each thread handling N = connections/threads
-d, --duration: duration of the test, e.g. 2s, 2m, 2h
-t, --threads: total number of threads to use
-s, --script: LuaJIT script, see SCRIPTING
-H, --header: HTTP header to add to request, e.g. "User-Agent: wrk"
--latency: print detailed latency statistics(在压测结束后,打印延迟统计信息)
--timeout: record a timeout if a response is not received within
this amount of time.
模拟4个线程 - 10条连接 - 运行压力测试10秒
wrk -t4 -c10 -d10s --latency http://127.0.0.1:port/test1
压测脚本
test.lua
### 请求方式
wrk.method = "POST"
### 设置 请求类型
wrk.headers["Content-Type"] = "application/json"
### POST 请求参数
wrk.body = '{"key1": "123","key2": "456"}'
模拟4个线程 - 10条连接 - 运行压力测试10秒
wrk -t4 -c10 -d10s --script=test.lua --latency http://127.0.0.1:port/test2
接口压测总结
- 先使用单线程不断增加连接数,直到QPS保持稳定或响应时间超过业务要求限制。在当期数值取得单线程最优连接数。
- 单个连接线程数保持不变,不断增加线程数(建议到CPU核心数为止即可),直到整体出现QPS水平。
- 如果QPS没有出现随着线程数增长则是目标服务器性能已经达到瓶颈,wrk单线程即可压测出目标机器最优QPS。
- 如果QPS一直没有出现水平趋势,则说明wrk压测机器性能出现了瓶颈,需要扩大wrk压测机性能或者增加压测机器集群。
文章评论