wrk2入门-http性能压测工具总结

一、功能介绍:

  wrk2是一个主要基于wrk的HTTP基准测试工具,wrk2经过修改后能够提供稳定的吞吐量负载以及更精确的延时统计,即通过设置参数,wrk2增加了–rate或-R参数设置吞吐量(每秒总请求数)及–u_latency参数显示延时统计。

二、安装过程:

wrk安装过程非常简单,下载源码后在项目目录下执行make命令即可。

  1. git地址:

    https://github.com/giltene/wrk2

    # git clone https://github.com/giltene/wrk2.git 下载源码
    # cd wrk2  安装目录
    # make
    
  2. make编译过程中问题解决:

     1. -bash: make: command not found

    [root@XXX wrk2-master]# make
    -bash: make: command not found	
    

      系统无法使用make,make install,一般出现== -bash: make: command not found ==的提示,是因为安装系统的时候使用的是最小化安装,缺少make、vim等常用命令。
      直接安装make即可解决问题:

    [root@XXX wrk2-master]#yum -y install gcc automake autoconf libtool make
    

      安装g++:

    [root@XXX wrk2-master]#yum install gcc gcc-c++
    

    2. src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory
    问题描述
      问题在于:系统中缺少openssl库,安装即可

    [root@XXX wrk2-master]# yum install openssl-devel  或者
    [root@XXX wrk2-master]# yum install libssl-dev
    
  3. 创建软链接到指定目录
    [root@XXX wrk2-master]# ln -s /export/ccc/wrk2-master/wrk /usr/local/bin
    

      这一步必须进行设置,否则会出现报错,-bash: wrk: command not found

  4. 验证是否安装成功

      make完成后当前路径下会生成可执行文件wrk,表示可以使用wrk进行http压测了。 安装成功

三、wrk 初步使用

  1. 基本用法:

    Basic Usage: wrk <options> <url>

    Options:                                            
        -c, --connections <N>  Connections to keep open  # HTTP连接数,如1k,1M,1G,
        -d, --duration  <T>  Duration of test  # 测试持续时间,如 2s 2m 2h          
        -t, --threads <N>  Number of threads to use   # 开启的线程数 
                                                          
        -s, --script   <S>  Load Lua script file # 进阶功能,使用 lua 脚本
        -H, --header   <H>  Add header to request  # 添加请求头
       		 # 打印详细延迟统计
        -L  --latency    Print latency statistics   
        -U  --u_latency  Print uncorrceted latency statistics  
      		 ==# 设置请求超时时间,大于该时间的请求将被记录==
              --timeout     <T>  Socket/request timeout     
        -B, --batch_latency    Measure latency of whole   
                               batches of pipelined ops   
                               (as opposed to each op)    
        -v, --version          Print version details      
        -R, --rate        <T>  work rate (throughput)    #工作速率(吞吐量)即每个线程每秒钟完成的请求数
                               in requests/sec (total)    
                               [Required Parameter]
    
  2. 使用方法–readme
使用方法 说明 吞吐量/每秒总请求数
wrk -t2 -c100 -d30s -R2000 http://127.0.0.1:8080/index.html 2个线程,100个连接,持续时间30s 每秒2000个请求 Requests/sec: 2000.12
wrk -t2 -c100 -d30s -R2000 --latency url 2个线程,100个连接,持续时间30s,每秒2000个请求 延迟标识,延迟百分比
  1. 参数设定经验
    在这里插入图片描述

四 测试场景

  1. 测试HTTP协议网络的性能

    [root@XXX scripts]# wrk -t2 -c1000 -d15 -R1000 --latency https://www.baidu.com/
    
    Running 15s test @ https://www.baidu.com/    ------压测时间15s
      2 threads and 1000 connections                         -------共2个测试线程,1000个连接
      Thread calibration: mean lat.: 24.071ms, rate sampling interval: 41ms
      Thread calibration: mean lat.: 24.373ms, rate sampling interval: 40ms
      Thread Stats   Avg      Stdev     Max   +/- Stdev     -----平均值 标准差 最大值 正负一个标准差所占的比例
        Latency    13.10ms    5.09ms 124.16ms   95.55%  -----延迟
        Req/Sec   449.03    706.21     5.15k    94.26%        -----处理中的请求数
      Latency Distribution (HdrHistogram - Recorded Latency)   -----延迟分布
     50.000%   12.34ms
     75.000%   13.68ms
     90.000%   15.83ms                  -----90分位的延迟
     99.000%   21.14ms                   ----99分位的延迟
     99.900%  107.97ms
     99.990%  124.22ms
     99.999%  124.22ms              
    100.000%  124.22ms
    #[Mean    =       13.101, StdDeviation   =        5.093]
    #[Max     =      124.160, Total count    =         2201]
    #[Buckets =           27, SubBuckets     =         2048]
    ----------------------------------------------------------
      13795 requests in 15.00s, 206.31MB read   ----15s内共处理完成了13795个请求,读取了206.31MB数据
    Requests/sec:    919.62                                     -----平均每秒处理完成919.62个请求
    Transfer/sec:     13.75MB                                   -----平均每秒读取数据13.75MB 
    

      压测简单说明:以上使用了2个线程1000个http连接,对baidu进行了15s的压测,并要求在压测结果中输出响应延迟信息。

  2. 测试当前服务的最大QPS

      进入安装目录,运行

通过-R参数获取吞吐量参数 每秒请求量的结果
./wrk2 -t10 -c50 -d30 -R3000 -H “Host:xxx.com” http://localhost/a/a.mp4 -L Requests/sec: 3000.12
./wrk2 -t10 -c50 -d30 -R5000 -H “Host:xxx.com” http://localhost/a/a.mp4 -L Requests/sec: 5000.12
./wrk2 -t10 -c50 -d30 -R10000 -H “Host:xxx.com” http://localhost/a/a.mp4 -L Requests/sec: 9800.12
./wrk2 -t10 -c50 -d30 -R20000 -H “Host:xxx.com” http://localhost/a/a.mp4 -L Requests/sec: 12500.12
./wrk2 -t10 -c50 -d30 -R30000 -H “Host:xxx.com” http://localhost/a/a.mp4 -L Requests/sec: 13000.12

从以上的测试过程中可以看出,服务最大的每秒请求量为13000,可见性能压测的QPS为1.3万左右,考虑本机测试性能损耗问题,即QPS>1.2万

  1. 使用Lua脚本个性化wrk压测

  以上是介绍wrk的安装及简单的使用,可以看出wrk的使用较简单方便,且测试结果清晰,一般情况下关注的指标主要是:90分位延迟、99分位延迟及Requests/sec。但是工作上往往需要较复杂的测试场景,这种简单的压测可能就不满足需求。比如,使用POST 方法跟服务器交互;每次请求使用不同的参数;为了更好的模拟服务场景,需要使用wrk的script lua脚本来定制压测过程,即满足定制化的需求。
  有关wrk高级使用方法,可以查看我的另一篇博客:wrk2的高级使用方法

猜你喜欢

转载自blog.csdn.net/ccccsy99/article/details/105958366