HTTP 压力测试工具 wrk

wrk是一个三方 HTTP 压力测试工具,当在单个多核 CPU 上运行时,能够产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如 epoll 和 kqueue。

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

安装:

git clone https://github.com/wg/wrk.git 
cd wrk && make 

从仓库拉代码可能比较慢,需要等一会儿

安装完成以后 输入wrk,如果看到以下输入就安装成功了

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)

翻译成中文

使用方法: 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 -t12 -c100 -d30s https://swoole.caiguanrong.com

测试结果:

[root@VM-142-222-centos wrk]# wrk -t4 -c100 -d30s http://swoole.caiguanrong.com
Running 30s test @ http://swoole.caiguanrong.com
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   160.54ms  195.43ms   1.24s    84.17%
    Req/Sec   264.61     93.14   747.00     75.06%
  31631 requests in 30.03s, 4.55MB read
Requests/sec:   1053.32
Transfer/sec:    155.28KB

参数解释:

4 threads and 100 connections

开启4个线程 100个连接(这里不是一个线程对应一个连接)

latencyReq/Sec

代表单个线程的统计数据,latency代表延迟时间,Req/Sec代表单个线程每秒完成的请求数,他们都具有平均值, 标准偏差, 最大值, 正负一个标准差占比。一般我们来说我们主要关注平均值和最大值

31631 requests in 30.03s, 4.55MB read

在30秒之内总共有31631个请求,总共读取4.55MB数据

Requests/sec和Transfer/sec

所有线程平均每秒钟完成了1053.32个请求,每秒钟读取155.28KB数据量

如果需要查看相应时间 在命令上增加参数 --latency

wrk -t4 -c100 -d30s --latency  http://swoole.caiguanrong.com

结果如下:

[root@VM-142-222-centos wrk]# wrk -t4 -c100 -d30s --latency  http://swoole.caiguanrong.com
Running 30s test @ http://swoole.caiguanrong.com
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   165.48ms  206.58ms   1.97s    84.72%
    Req/Sec   265.49     94.24   750.00     75.00%
  Latency Distribution
     50%   37.56ms
     75%  267.43ms
     90%  501.98ms
     99%  801.05ms
  31752 requests in 30.03s, 4.57MB read
Requests/sec:   1057.29
Transfer/sec:    155.87KB

wrk作为http压测还是非常简便的,后面再介绍下Apache 自带的压力测试工具ab

蔡关荣博客
请先登录后发表评论
  • latest comments
  • 总共0条评论