zoukankan      html  css  js  c++  java
  • 基准测试工具:Wrk初识

    最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。

    这篇博客,简单介绍下HTTP基准测试工具wrk的基本使用方法。。。

     

    一、压测工具对比

    工具名称 类型 多协议支持 优缺点 适用人群&场景
    Apache ab 开源 HTTP  Apache自带源生测试工具,安装部署简单,不适合多协议及复杂场景  开发:单机&单接口性能基准验证 
    PTS 商业 多协议(支持不太好)  阿里云配套收费压测工具,支持多协议链路压测,功能完善   技术人员:基准&链路&高并发
    Jmeter 开源 多协议  使用率高&学习成本低,多协议复杂场景支持良好,受限于机制,资源损耗较高  技术人员:多场景&万级以下并发全场景 
    Locust  开源  多协议(需二次开发)  python开源压测框架,支持多协议&复杂场景(需二次开发,定制化)  技术人员:性能测试&支持程度取决于定制开发 
    Wrk  开源  HTTP  HTTP基准测试工具,高并发低损耗,安装部署简单,不适合多协议及复杂场景  开发:单机&单接口性能基准验证  

     

    二、简介及安装

    1、简介

    Wrk是一个支持HTTP协议的基准测试工具,结合了多线程设计和可扩展事件通知,底层封装epoll(linux)和kqueue(bsd),能用较少线程生成大量并发请求(使用了操作系统特定的高性能io机制)。

    源生支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告;SCRIPTING有详细说明,并且scripts中提供了几个示例。

    GitHub地址:Wrk

    2、安装

    Point:wrk托管与github,前先安装Git;依赖gcc和OpenSSL(阿里云Centos服务默认已有)库,如下载报错,安装即可!命令如下:

    # 下载命令
    git clone https://github.com/wg/wrk.git
    # 进入wrk文件夹
    cd wrk
    # 编译
    make

    编译需要一定时间,耐心等待即可。编译成功后,示例如下:

     

    三、示例demo

    1、参数说明

    Usage: wrk <options> <url>                            
      Options:
    # 脚本开启的HTTP连接数                                          
        -c, --connections <N>  Connections to keep open
    # 测试脚本执行的时长   
        -d, --duration      <T>  Duration of test   
    # 测试脚本使用的线程数        
        -t, --threads        <N>  Number of threads to use 
    # 加载Lua脚本文件                          
        -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 

     2、示例脚本

    [root@localhost wrk]# ./wrk -t4 -c100 -d60s --latency http://www.cnblogs.com/imyalost
    Running 1m test @ http://www.cnblogs.com/imyalost
      4 threads and 100 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   196.87ms  318.88ms   1.90s    86.33%
        Req/Sec   316.86    220.75     3.19k    75.19%
      Latency Distribution
         50%    5.73ms
         75%  259.62ms
         90%  615.77ms
         99%    1.47s 
      73434 requests in 1.00m, 11.06MB read
      Socket errors: connect 0, read 2, write 0, timeout 267
    Requests/sec:   1222.07
    Transfer/sec:    188.51KB

    结果解析:

     4 threads and 100 connections :4个线程,发起100个http连接请求;

     Thread Stats Avg Stdev Max +/- Stdev :测试结果统计(精简版jmeter的聚合报告),分别是:平均值、标准偏差、最大值、偏差比(值越高表示测试结果离散程度越高,性能波动较大);

     Latency :响应时间分布(即百分比响应时间范围);

     Req/Sec :每秒完成的请求数;

     Latency Distribution :如上面的示例结果,分别代表50/75/90/99%的响应时间在多少ms以内;

     73434 requests in 1.00m, 11.06MB read :本次测试共计在1min内发起73434个请求,总计读取11.06MB的数据;

     Socket errors: connect 0, read 2, write 0, timeout 267 :本次测试中,连接失败0个,读取错误2个,超时267个;

     Requests/sec :所有线程平均每秒钟完成1222.07个请求;

     Transfer/sec :平均每秒读取188.51KB数据(吞吐量);

    3、更多用法

    前文提到了wrk支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告,wrk提供的几个lua函数作用如下:

    是不是发现和selenium自动化很像,特别是setup和init函数(手动狗头)。。。

     

    以上就是关于基准测试工具Wrk的简单用法和几种常见的压测工具对比,上面的脚本仅是个demo,具体使用方法请自行实践。。。

    其实吧,我觉得这个工具更适合开发童鞋写好一个新的接口后,自己测试一下,这样也不用等出性能问题了才想起来要找性能测试同学压测。。。

     

  • 相关阅读:
    JDBC事务处理
    JDBC之LOB数据类型
    使用JDBC驱动程序处理元数据
    JDBC之PreparedStatement
    JDBC主要API学习总结
    JDBC简介
    ForkJoinPool 分支/合并框架
    线程池
    线程八锁
    jQuery中的事件冒泡
  • 原文地址:https://www.cnblogs.com/imyalost/p/11405797.html
Copyright © 2011-2022 走看看