wrk工具使用笔记

2024-03-01 214点热度 0人点赞 0条评论

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压测机性能或者增加压测机器集群。

mylomen

本人从事 JAVA 开发10多年,将之前整理的笔记分享出来,希望能够帮助到努力的你。

文章评论