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