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