Wrk性能测试详解

2021-10-02

一、简单介绍

wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。

优势:

  • 轻量级性能测试工具
  • 安装简单
  • 学习曲线基本为0,几分钟就学会使用了
  • 通过很少的线程就可以压出很大的并发量,例如几万、几十万

劣势:
目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。

二、用法

使用方法: wrk <选项> <被测HTTP服务的URL>                           

  Options:                                           
    -c, --connections <N>  跟服务器建立并保持的TCP连接数量 
    -d, --duration    <T>  压测时间          
    -t, --threads     <N>  使用多少个线程进行压测,压测时,是有一个主线程来控制我们设置的n个子线程间调度  
                                                    
    -s, --script      <S>  指定Lua脚本路径      
    -H, --header      <H>  为每一个HTTP请求添加HTTP头     
        --latency          在压测结束后,打印延迟统计信息  
        --timeout     <T>  超时时间    
    -v, --version          打印正在使用的wrk的详细版本信                                              

  <N>代表数字参数,支持国际单位 (1k, 1M, 1G)
  <T>代表时间参数,支持时间单位 (2s, 2m, 2h)

三、实例及分析

做一个简单的压力测试

wrk -t2 -c20 -d30s --latency  https://loveblog.vip/

image.png

以上是使用2个线程20个连接,对博客首页进行了30秒的压测,并要求在压测结果中输出响应延迟信息。
注意⚠️(不建议对博客进行测试,不然搞挂了你可就看不了,改个链接哈)

对结果分析:

Running 30s test @ https://loveblog.vip/【压测时间30s】
  2 threads and 20 connections【2个线程,20个连接】
  Thread Stats   Avg   Stdev  Max   +/- Stdev
                平均值  标准值 最大值 正负一个标准差所占比例
    Latency   468.58ms  475.96ms   2.00s    86.69%
      延迟
   Req/Sec     16.03     15.95   101.00     87.00%
  处理中的请求数
  Latency Distribution 【延迟分布】
     50%  285.54ms
     75%  694.79ms
     90%    1.23s
     99%    1.87s【99分位的延迟:%99的请求在1.87s以内】
  609 requests in 30.09s, 8.46MB read
  30.01秒内共处理完成了609个请求,读取了8.46MB数据
  Socket errors: connect 0, read 0, write 0, timeout 53
Requests/sec:     20.24
平均每秒处理完成20.24个请求
Transfer/sec:    287.87KB
平均每秒读取数据287.87KB

四、使用lua脚本进行压测

待补充