Wrk-http 测试工具

Wrk-HTTP基准测试工具

wrk是一种现代HTTP基准测试工具,当在单个多核CPU上运行时,能够产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如epoll和kqueue。
可选的LuaJIT脚本可以执行HTTP请求生成,响应处理和自定义报告。SCRIPTING中提供了详细信息,scripts 中提供了一些示例。

环境安装

依赖

[root@hdt02 ~]# yum install git gcc -y 已安装可以跳过

下载源码

[root@hdt02 ~]# git clone https://github.com/wg/wrk.git
[root@hdt02 ~]# cd wrk

编译, 安装成功之后会再 wrk 文件夹下 生成 wrk 可执行文件。

[root@hdt02 wrk]# make

可以建立软连接,/opt/wrk/wrk 是我这边的路径,操作前需要换成你们服务器上的路径 pwd 查看下

[root@hdt02 wrk]# pwd
/opt/wrk/wrk

[root@hdt02 wrk]# ln -s /opt/wrk/wrk /usr/local/bin
[root@hdt02 wrk]# 

查看版本

[root@hdt02 wrk]# ./wrk/wrk -v
wrk 4.1.0-4-g0896020 [epoll] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>                            
  Options:                                            
    -c, --connections <N>  Connections to keep open   
    -d, --duration    <T>  Duration of test           
    -t, --threads     <N>  Number of threads to use   
                                                      
    -s, --script      <S>  Load Lua script file       
    -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)
[root@hdt02 wrk]# 

从以上信息看出使用了 epoll >>> 传送门。这意味着我们可以用少量的线程来创建大量连接进行压测。

参数说明

  • -t 需要模拟的线程数
  • -c 需要模拟的连接数
  • -d 测试的持续时间
  • -timeout 超时的时间
  • -latency 显示延迟统计

测试结果

Thread Stats Avg Stdev Max +/- Stdev
Latency(响应时间) 415.76ms 411.33ms 1.96s 86.44%
Req/Sec 203.50 110.21 1.95k 98.25%
[root@hdt02 wrk]# ./wrk/wrk -t4 -c400 -d30s --latency  http://www.baidu.com
Running 30s test @ http://www.baidu.com
  4 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   415.76ms  411.33ms   2.00s    86.44%
    Req/Sec   203.50    110.21     1.95k    98.25%
  Latency Distribution
     50%  292.49ms
     75%  639.56ms
     90%    1.02s 
     99%    1.69s 
  24330 requests in 30.01s, 364.41MB read
  Socket errors: connect 0, read 417, write 0, timeout 607
Requests/sec:    810.65
Transfer/sec:     12.14MB
[root@hdt02 wrk]# 

以上使用4个线程400个连接,对百度首页进行了30秒的压测,并要求在压测结果中输出响应延迟信息。以下对压测结果进行简单注释:

结果显示说明

名称 说明
Avg 平均值 每次测试的平均值
Stdev 标准偏差 结果的离散程度,越高说明越不稳定
Max 最大值 最大的一次结果
+/- Stdev 正负一个标准差占比 结果的离散程度,越大越不稳定
Requests/sec 每秒请求数(也就是QPS) 这是一项压力测试的性能指标,
通过这个参数可以看出吞吐量
Req/Sec 响应延迟信息 可以查看不同比例的响应信息
Latency 完成的请求数 每个线程完成的请求数

使用Lua 脚本 Post 测试

首先需要准备一个lua文件

### 请求方式
wrk.method = "POST"

### 设置 请求类型
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

### POST 请求参数
wrk.body  = '{"key": "val"}'

这个文件内容建议自己填写,保存为 api-post.lua 文件

执行脚本

以下是模拟6个线程,600个连接,在60s内,间隔1s 执行 api-post-api.lua 脚本的请求

localhost:5606 需要换成自己服务的IP:PORT

[root@hdt02 wrk]# ll
总用量 8
-rw-r--r-- 1 root root  114 11月  5 13:55 api-post-api.lua
drwxr-xr-x 8 root root 4096 11月  5 13:35 wrk
[root@hdt02 wrk]# vim prt-post-api.lua 
[root@hdt02 wrk]# ./wrk/wrk -t6 -c600 -d60s --script=api-post-api.lua --latency http://localhost:8080/ipagefive/hello

Running 1m test @ http://localhost:8080/ipagefive/hello
  6 threads and 600 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     3.95ms   37.59ms   1.17s    99.09%
    Req/Sec    41.70k    11.97k   74.73k    84.18%
  Latency Distribution
     50%    0.86ms
     75%    1.10ms
     90%    1.48ms
     99%   30.36ms
  9952626 requests in 1.00m, 1.95GB read
Requests/sec: 165608.22
Transfer/sec:     33.17MB

没错的话,你压测的接口承受能力(QPS)可以达到 165608

其它

github-wrk

其它文章

posted @ 2020-03-28 23:49  Wu'shushu  阅读(416)  评论(0)    收藏  举报