当前位置: 首页 > 工具软件 > wrk > 使用案例 >

使用Wrk 进行性能压测

印嘉泽
2023-12-01

wrk的简介

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

wrk是开源免费的, 代码在 github 上:https://github.com/wg/wrk

wrk的优势劣势

wrk是一款轻量级性能测试工具,安装简单,上手容易。并且基于系统自带的高性能I/O机制,通过很少的线程就可以压出很大的并发量,例如几万、几十万,这是很多性能测试工具无法做到的。

但是wrk的劣势也很明显,仅支持单机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。

 

wrk的安装

wrk只能运行于 Unix 类的系统上。Mac下可以使用快捷下载安装:

brew install wrk

安装成功后,可以使用wrk --help 查看安装是否成功

LiTandeMacBook-Pro:~ litan$ 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的参数作用,可以简单看翻译之后的内容:

使用方法: wrk <选项> <被测HTTP服务的URL>                            
  Options:                                            
    -c, --connections <N>  跟服务器建立并保持的TCP连接数量  
    -d, --duration    <T>  压测时间           
    -t, --threads     <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的使用

安装成功后,直接输入参数和url运行:对百度url发起测试,线程数为 8,模拟 400 个并发请求,持续 30 S

wrk -t8 -c200 -d30s --latency  https://www.baidu.com

运行完成后输出结果:

LiTandeMacBook-Pro:~ litan$ 
LiTandeMacBook-Pro:~ litan$ wrk -t8 -c200 -d30s --latency  https://www.baidu.com
Running 30s test @ https://www.baidu.com
  8 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   575.48ms  246.02ms   2.00s    80.54%
    Req/Sec    37.14     16.49   101.00     61.17%
  Latency Distribution
     50%  534.86ms
     75%  594.73ms
     90%  976.88ms
     99%    1.59s 
  8839 requests in 30.09s, 132.70MB read
  Socket errors: connect 0, read 0, write 0, timeout 321
Requests/sec:    293.76
Transfer/sec:      4.41MB
LiTandeMacBook-Pro:~ litan$ 
  • Latency:响应时间
  • Req/Sec:每个线程每秒钟的完成的请求数
  • Avg:平均
  • Max:最大
  • Stdev:标准差
  • +/- Stdev: 正负一个标准差占比

 

 

 

 类似资料: