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):更多

       

  

原文地址:https://www.cnblogs.com/zhangtu/p/14349035.html