美文网首页
聊聊如何利用wrk进行压测初探

聊聊如何利用wrk进行压测初探

作者: linyb极客之路 | 来源:发表于2023-07-24 09:37 被阅读0次

    wrk简介

    wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计,并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外,用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。

    wrk 官网

    https://github.com/wg/wrk

    wrk安装

    wrk支持linux安装,不支持windows安装。因此我们只能在linux环境下进行安装

    安装步骤

    1、下载wrk

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

    2、切换到wrk目录,执行编译并安装

    
     cd wrk
     make
    

    3、将可执行文件wrk复制到/usr/local/bin

    cp wrk /usr/local/bin
    

    wrk参数简介

    输入命令

    wrk --help
    

    查看支持的相关参数

    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)
    
    • -c 与服务器建立并保持的TCP连接数,其实就是并发数
    • -d 压测的持续时间(单位为秒),默认为 10s
    • -t 压测的线程数。正常设置为cpu核心线程数的2-4倍即可。如果线程数过多,会因线程上下文切换频繁,影响到压测效果
    • -s 指定Lua脚本路径。可以通过Lua脚本实现复杂请求
    • -H 指定请求的 HTTP Header
    • --latency 压测结束后,打印响应时间统计消息
    • --timeout 请求超时时间
    • -v 版本信息

    wrk使用示例

    使用wrk的前置条件

    在压测之前,先确保linux的最大文件句柄数是否足够,可以通过

    ulimit -a 
    

    查看当前用户的文件句柄限制 ,如果不够则会报

    "too many open files" 
    

    可以通过修改
    /etc/security/limits.conf 文件内容,修改内容可以形如下

    root soft nproc 65535
    root hard nproc 65535
    root soft nofile 65535
    root hard nofile 65535
    

    此时再通过 ulimit -a 查看一下,如果没生效,可以在/etc/security/limits.d/这个目录进行修改。查了一下资料在Centos7系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。
    因此我们可以在/etc/security/limits.d/新建一个文件比如nofile.conf,填入

    root soft nproc 65535
    root hard nproc 65535
    root soft nofile 65535
    root hard nofile 65535
    

    然后执行重启命令

    示例

    wrk -t32 -c5000 -d60s --timeout 30s --latency https://www.baidu.com/
    

    这个命令的意思是用32个线程模拟5000个并发,对百度这个网站进行持续60s的压测,请求超时时间为30s

    压测结果解读

    Running 1m test @ https://www.baidu.com/
      32 threads and 5000 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency     6.59s     5.02s   29.57s    79.01%
        Req/Sec     5.14      4.82    36.00     83.11%
      Latency Distribution
         50%    4.91s 
         75%    8.24s 
         90%   13.38s 
         99%   25.42s 
      4677 requests in 1.00m, 51.98MB read
      Socket errors: connect 40, read 0, write 0, timeout 27
    Requests/sec:     77.82
    Transfer/sec:      0.86MB
    

    a、 Thread Stats 线程统计,包括响应时间以及请求时间

    • Latency:响应时间,有平均值、标准偏差、最大值、正负一个标准差占比。
    • Req/Sec:每个线程每秒完成的请求数, 同样有平均值、标准偏差、最大值、正负一个标准差占比。

    b、 Latency Distribution 响应时间分布

    • 50%:50% 的响应时间为4.91s。
    • 75%:75% 的响应时间为8.24s 。
    • 90%:90% 的响应时间为13.38s
    • 99%:99% 的响应时间为25.42s。

    c、 4677 requests in 1.00m, 51.98MB read

    1m 完成的总请求数(4677)和数据读取量(51.98MB)

    d、 Socket errors: connect 40, read 0, write 0, timeout 27

    错误统计,会统计 connect 连接失败请求个数(40个)、读失败请求个数、写失败请求个数、超时请求个数(27个)。

    e、 Requests/sec: 77.82

    每秒请求数为77.82(QPS)

    f、 Transfer/sec: 0.86MB

    平均每秒读取0.86MB数据(TPS)

    总结

    本文是wrk的一个入门介绍,wrk本身具有轻量、安装简单、学习成本很低,几分钟就可以上手。利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量等优点,但wrk目前仅支持单机压测 ,不支持多机分布式压力测试,因此wrk适合性能基准测试。其实除了wrk之外,还有ab、jmeter、locust、LoadRunner、go-stress-testing等压测工具可供选择

    相关文章

      网友评论

          本文标题:聊聊如何利用wrk进行压测初探

          本文链接:https://www.haomeiwen.com/subject/hhiqpdtx.html