性能测试工具、HTTP基准测试工具:wrk

2023-06-01 00:00:00 测试工具 基准 性能

项目开发完准备上线的时候,你了解你的接口性能怎么样?qps、rps瓶颈是多少?

很多项目上线初期用户量较小,没有达到瓶颈峰值就没啥事,超出负载直接就崩盘,这对项目运营是极其不好的。

今天推荐一个性能测试工具:wrk

wrk是一个现代的HTTP基准测试工具,在单个多核CPU上运行时能够产生巨大的负载。

它将多线程设计与可扩展的事件通知系统(如epoll和kqueue)相结合。

一个可选的LuaJIT脚本可以执行HTTP请求生成、响应处理和自定义报告。

git:

https://github.com/wg/wrk


性能测试相关名词

QPS 每秒查询率 (Query Per Second)
每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准

并发用户数
指系统可以同时承载的正常使用系统功能的用户的数量

吞吐量 (Throughput)
吞吐量是指系统在单位时间内处理请求的数量

响应时间 (RT)
指系统对请求作出响应的时间


wrk的使用

实操一下看看效果 , 既然是开源工具,下载安装编译的方式都很类似

1、下载 wrk 项目

git clone https://github.com/wg/wrk.git wrk

2、编译项目

cd wrk
make

3、将编译出来的 wrk 可执行程序放到用户自己的 bin 目录下

 cp wrk /usr/local/sbin/

4、运行wrk,我们就可以开始使用wrk工具了

# wrk
Usage: wrk <options> <url>
  Options:
    -c, --connections <N>  Connections to keep open // 和服务器建立连接并保持的 TCP 连接数量  
    -d, --duration    <T>  Duration of test  // 具体的压测时间
    -t, --threads     <N>  Number of threads to use // 使用的线程数量
    -s, --script      <S>  Load Lua script file    // 加载 lua 文件
    -H, --header      <H>  Add header to request // 添加请求头
        --latency          Print latency statistics // 打印延迟统计数据
        --timeout     <T>  Socket/request timeout // 超时时间
    -v, --version          Print version details // 版本信息
  Numeric arguments may include a SI unit (1k, 1M, 1G)
  Time arguments may include a time unit (2s, 2m, 2h)

ps:

上面的 N 表示数字参数,可以是 1k, 1M, 1G

T 表示时间参数,可以是 2s, 2m, 2h


使用wrk工具 示例

测试百度:

# wrk -c200 -t8 -d40 --latency https://www.baidu.com
Running 40s test @ https://www.baidu.com
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   284.06ms  332.08ms   2.00s    86.02%
    Req/Sec    96.41     36.69   538.00     79.63%
  Latency Distribution
     50%  120.17ms
     75%  357.11ms
     90%  730.79ms
     99%    1.56s
  31088 requests in 40.07s, 466.95MB read
  Socket errors: connect 0, read 138, write 0, timeout 264
Requests/sec:    775.87
Transfer/sec:     11.65MB

测试掘金:

# wrk -c200 -t8 -d40 --latency https://juejin.cn/
Running 40s test @ https://juejin.cn/
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.53s   481.41ms   2.00s    87.68%
    Req/Sec    10.27      7.50    70.00     73.61%
  Latency Distribution
     50%    1.67s
     75%    1.85s
     90%    1.95s
     99%    2.00s
  2406 requests in 40.05s, 476.65MB read
  Socket errors: connect 0, read 0, write 0, timeout 1797
Requests/sec:     60.08
Transfer/sec:     11.90MB

解释上面测试报告相关字段的含义:

Latency 延迟

Avg 平均值

Stdev 标准差

+/- Stdev 标准差占比

Requests/sec 平均每秒处理的请求数

通常说的qps,这里可以看出掘金是60.08 , 百度是775.87


总结

实践完毕之后,我们来捋一捋 wrk 的优势和劣势

优势:

wrk 是轻量级性能测试工具,用起来非常方便,且安装也很简单,学习成本低

根据官方介绍,我们知道 wrk 基于系统自带的高性能 I/O 机制,如 epoll, kqueue

这些机制是利用异步的事件驱动框架 多路 IO 复用来提高并发性能的


劣势:

仅支持单机压测,如果需要测试多台机器,wrk 就不合适了

相关文章