zoukankan      html  css  js  c++  java
  • wrk入门(1):测试网站延迟

    1 wrk简介

           wrk是一个轻量级的压力测试工具,官方原话

           1. wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU.

           2.  An optional LuaJIT script can perform HTTP request generation, response processing, and custom reporting.

           意思是说wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,对目标机器产生大量的负载。并且可以用lua脚本生成HTTP请求,处理响应以及自定义报告。

    2 安装

           docker 快速安装:

    # docker安装最新版本wrk
    docker pull williamyeh/wrk

    # 启动wrk,查看版本,--rm容器停止后删除容器 docker run --rm williamyeh/wrk --version

    3 使用

           本文重点介绍用wrk测量高负载下HTTP服务的延迟。先说一下延迟的概念:从发出请求(由wrk)到收到响应(从服务器)之间的时间间隔。wrk可用于模拟访问者使用浏览器访问测试网站,并记录延迟时间。

     

           实际测试时有两个注意点:

           1.为排除网络原因对测试结果造成影响,安装wrk的电脑(简称wrk1)和应用服务器(简称app1)必须在同一内网里。

           2.wrk1和app1不能是同一台电脑,因为两个应用间会争夺资源,结果将不可靠。

            写博文时我用的是一台腾讯云服务器和一台本地虚拟机(嘛,实际测试中这样的测试结果肯定是无效的,因为上述1,别问为什么不来两台云服务器,(lll¬ω¬)..)

    接下来开始正式测试。

    3.1 前置准备

           首先在wrk1上curl一下目标应用,确保一下可以正常访问

    # -i 打印http响应头
    curl -i http://XXX.XX.XX.XX:port/

    3.2 执行命令

           wrk的命令格式如下:

    wrk -t2 -c5 -d5s --timeout 2s http://xx.xx.xx.xx:port/

    -t2: 使用两个单独的线程。
    -c5: 打开六个连接(0到5,有6个)。
    -d5s: 测试运行五秒钟。
    --timeout 2s: 超时时间2s。
    http://xx.xx.xx.xx:port/ : 请求地址。

           这个命令的含义为模拟了6个用户,请求网页地址5秒钟;下图形象的展示了请求的细节


           因为我们的wrk装在docker容器里面,我们需要在容器里面运行命令,所以在我们本地,命令变为:

    docker run --rm williamyeh/wrk -t2 -c5 -d5s --timeout 2s http://xx.xx.xx.xx:port/

    3.3 分析结果

    Running 5s test @ http://xxx.x.xx.xx:port/
      2 threads and 5 connections

           这里显示的是配置摘要。测试耗时5秒,服务器机器IP显示,测试使用了两个线程。

      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   234.52ms  212.23ms 970.73ms   64.00%
        Req/Sec    12.30     18.31   110.00     94.00%

           这部分向我们展示了基准测试的正态分布详细信息

    Latency:延时时间。

    Req/Sec:每秒请求数。

    Avg:平均值。

    Stdev:标准差。

    Max:最大值。

    +/- Stedv:官网里只是说是高斯函数的参数之一,具体是什么我也不清楚,如果有知道的大佬看见希望能指点迷津。

     92 requests in 5.02s, 834.32KB read
    Requests/sec:     18.32
    Transfer/sec:    166.17KB

           5.02秒内发送了92个请求,传输了834.32KB的数据。Requests/sec和Transfer/sec则是对 92 requests in 5.02s, 834.32KB read的简单数学计算。

           不难得出,对任何网页来说,Requests/sec越高越好,Latency越低越好。但判断一个测试结果是否合格光看数据是不够的,还得结合具体应用分析,比如:

           1. connections数量,通常,设置的connections越多,应用程序将承受更大的负载, 每秒应该收到的请求就越少。延迟也会增加。

           2. 服务器,是大型的还是小型的。

           3. 服务器数量。

           4. 服务器类型,是提供静态文件的缓存服务器还是提供动态响应的广告服务器?

           5. 数据库类型,数据库集群大小,数据库连接类型。

           6. 请求和响应的类型,是AJAX请求还是API调用。

           7. 等等等等...

    3.4 改善延时的措施

           1. 调整代码。

           2. 检查数据库是否是瓶颈。

           3. 添加缓存层。

           4. 垂直扩展:向计算机添加资源。

           5. 水平扩展:负载均衡,添加另一台计算机到负载均衡器。

           查看详细内容(可能需要FQ):更多

           

      

  • 相关阅读:
    WeTest与腾讯安全联合推出小程序质量方案,助力私域流量2.0新增长
    【福利】腾讯WeTest专有云,限时开放招募体验官
    新官网 心体验,腾讯WeTest全新产品功能与解决方案发布!
    大会回顾丨游戏用户体验优化如何实践,看大咖怎么说(附PPT下载)
    【福利】腾讯WeTest专有云解决方案,限时开放招募体验官
    【干货分享】研效优化实践:AI算法助力深层BUG挖掘
    WeTest小程序质量专项方案推出,小程序异常监控内测招募中
    WeTest.net全球能力开放:锻造高品质产品,构建全球竞争力
    腾讯WeTest即将亮相MTSC2021中国互联网测试开发大会
    压测大师链路监控服务开放免费体验预约
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14349035.html
Copyright © 2011-2022 走看看