zoukankan      html  css  js  c++  java
  • 轻量级性能测试工具 wrk

    在完成一个接口开发后,在交给测试工程师之前,经常也会想知道,自己写的这个接口的性能如何呢?吞吐量能达到多少?QPS(query-per-second 每秒处理完的请求数) 能达到多少呢?

    常用的性能测试工具,如 Apache ab, Apache JMeter (互联网公司用的较多),LoadRunner 等

    github: https://github.com/wg/wrk

    what is wrk?

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

    PS: 其实,wrk 是复用了 redis 的 ae 异步事件驱动框架,准确来说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl 的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而被大家所熟知。

    优点:
    轻量级性能测试工具;

    安装简单(相对 Apache ab 来说);
    学习曲线基本为零,几分钟就能学会咋用了;
    基于系统自带的高性能 I/O 机制,如 epoll, kqueue, 利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量;

    缺点:
    wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对我们后端开发人员来说,应付日常接口性能验证还是比较友好的

    安装:

    CentOS
    
    sudo yum groupinstall 'Development Tools'
    sudo yum install -y openssl-devel git 
    git clone https://github.com/wg/wrk.git wrk
    cd wrk
    make
    # 将可执行文件移动到 /usr/local/bin 位置
    sudo cp wrk /usr/local/bin
    
    
    
    MacOS
    brew install wrk
    
    验证:
    wrk -v
    

    如何使用:

    使用方法: 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)
    
    

    PS: 关于线程数,并不是设置的越大,压测效果越好,线程设置过大,反而会导致线程切换过于频繁,效果降低,一般来说,推荐设置成压测机器 CPU 核心数的 2 倍到 4 倍就行了。

    简单使用案例:

    wrk -t12 -c400 -d30s http://www.baidu.com
    这条命令表示,利用 wrk 对 www.baidu.com 发起压力测试,线程数为 12,模拟 400 个并发请求,持续 30 秒。

    Host:~ liuge36$ wrk -t12 -c400 -d10s http://127.0.0.1:8900/test
    Running 10s test @ http://127.0.0.1:8900/test
      12 threads and 400 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency    14.88ms   27.77ms 321.47ms   94.47%
        Req/Sec     1.69k     1.26k    4.04k    50.04%
      200054 requests in 10.10s, 22.93MB read
      Socket errors: connect 155, read 196, write 0, timeout 0
    Requests/sec:  19813.39  # 平均每秒处理请求数
    Transfer/sec:      2.27MB
    Host:~ liuge36$ 
    

    参考:https://www.cnblogs.com/quanxiaoha/p/10661650.html

  • 相关阅读:
    org.Hs.eg.db
    Error in readRDS(dest) : error reading from connection
    R语言中的特殊值 NA NULL NaN Inf
    C#转Java之路之三:多线程并发容器即线程安全的容器
    C#转Java之路之二:多线程原子变量
    C#转Java之路之一:线程
    H5 input type="search" 不显示搜索 解决方法
    陪你在路上...我却渐行渐远
    Extjs使用 RestfulWebApi +Token验证小结
    Oracle 10g的备份与还原
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614701.html
Copyright © 2011-2022 走看看