已有 21 次阅读 2016-04-13 12:43 | 系统分类:性能优化 |
本次测试基于以下环境:
ApacheBench(v2.3)
Mac OS X 10.10.5
2.7 GHz Intel Core i5
Memory 8GB
该文主要收集ab test的各项参数的具体含义并举例介绍ab test的基本使用方法.
官方释义如下: ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server 简单来说就是一款压力测试工具, 可以通过创建多线程模拟多用户同时请求服务器行为, 从而实现对目标服务器进行压力测试的目标.对 https://github.com 网站模拟压力测试的效果图如下:
联系上图对ab测试的各项参数进行阐述:
被测Web服务器软件名称, 它来自http响应数据的头信息.
请求的URL中的主机部分名称,它来自http请求数据的头信息.
被测Web服务器软件的监听端口.
客户端与服务器端的协商头信息, 仅当使用了SSL协议时才会打印此信息, 例如此处测试的Github网站采用的是 https 协议, 使用了SSL协议, 因此ab打印出了此信息.
请求URL中的根绝对路径, 此处为 / .
首次响应数据的正文长度, 单位为字节.
并发用户数, 命令中表现为 -c 后面跟着的参数.
所有请求的总耗时, 总请求表现为 -n 后面的参数, 从首个socket被创建至接受到最后一个响应的耗时.
总请求数, 与命令中 -n 后面的参数一致.
失败的请求数,失败指的是连接服务器、发送数据、接收数据等环节发生异常, 以及无响应后超时的情况.如果接受到的http响应数据的头信息中含有 2xx 以外的状态码,则会在测试结果显示另一个名为 Non-2xx responses 的统计项,用于统计这部分请求数, 这些请求并不算是失败的请求.
如果请求为 POST 类型带有请求体此处才会打印出来, 表示带数据发送请求.
所有请求的响应数据长度总和, 包括每个http响应数据的头信息和正文数据的长度(不包括http请求数据的长度).
所有请求的响应数据中正文数据的总和, 即不包括响应数据中头信息的长度.
这里相当于服务器每秒所能接受的请求数即吞吐率, 可通过公式计算 Complete requests / Time taken for tests , 如对上图中的结果计算 10 / 10.497 ≈ 0.95 , 后面的计算结果都是四舍五入近似值, (mean) 表示这是一个平均值. 为了测试随着请求数的增加该值会出现怎样的变化, 特地写了段程序分析 点击看代码 查看疑问 .
第一个TPR表示用户平均请求等待时间, 可通过公式计算 Time taken for tests / (Complete requests /Concurrency Level) , 如对上图中的结果计算 10.497 / 10 / 2 ≈ 2099.4 (这里是近似值).
第二个TPR表示服务器平均处理每一个并发请求的时间, 可通过公式计算 Time per request / Concurrency Level , 如果对上图中的结果计算 2099.4 / 2 ≈ 1049.7 (这里是近似值).
请求在单位时间内从服务器获取的数据长度, 可通过公式计算 Total transferred / Time taken for tests , 如对上图对结果计算计算 273337(byte) / 10.497 ≈ 26039.5351 / 1024(kb) ≈ 25.43kb/s , 从这里也可以看出大致的带宽需求.
此处对 Connect 、 Processing 、 Waiting 、 Total 进行解释. Connect 表示网络延时加上与远程服务器建立连接所耗费的时间, Processing 表示第一个字节发出去至接受到第一个响应字节之间所耗费的时间, 这里大致可以推断出服务器的处理能力、 Waiting 表示最后一个字节发送完至接受到第一个字节到响应时间间隔、 Total 表示从建立连接开始至接受到第一个字节响应的总时间, 是 Connect 与 Processing 的时间总和, 当然此处不能单纯根据上图的结果去加, 因为图中表示的是均值.
这里表示请求处理时间的分布与上面 Time per request 对应, 从图中可以看到50%的处理时间小于1535ms, 根据 Connection Times 可以看到最长的处理时间为6394ms, 最短处理时间为1306ms.
使用 -g 参数结合 gnuplot 可以从图标中更加直观的看到分析结果, 如下图为一个简单的ab测试后使用 gnuplot 生成的图:
以下介绍几个基本的使用场景, 更多ab参数请点击参考链接查看官网介绍.
ab -n1000 http://www.example.com/
此处在当前文件夹下面需要准备 p.json 文件, 文件内容为json格式的key/value对: ab -n1000 -p p.json -T application/json http://www.example.com/
并发数不能大于总请求数: ab -n1000 -c20 http://www.example.com/
ab -n1000 -v 2 http://www.example.com/
生成 gnuplot 生成分析图所需要的数据文件: ab -n1000 -g g.tsv http://www.example.com/
主要参考链接如下: Apache httpd(v2.4) 各项参数含义 Connection Times 关于gnuplot