压力测试工具ab的使用
1、什么是ab
ab 是apache自带的压力测试工具,ab是apachebench命令的缩写。
2、ab 的工作原理
ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问,从而达到压力测试的目的。
3、使用ab时的注意事项
ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。
但却会给目标服务器造成巨大的负载,其原理类似CC攻击。
自己测试使用也需要注意,否则一次上太多的负载,可能造成目标服务器资源耗完,严重时甚至导致死机。
4、linux 上安装ab工具
yum -y install httpd-tools
5、ab 常用参数说明
-n :总共的请求执行数,默认为1;
-c: 并发数,默认是1;
-t:测试持续多长时间,秒为单位,默认50000s
-p:POST时的数据文件
-w: 以HTML表的格式输出结果
注:-n 和 -t 参数一般只选择其一
6、ab 测试结果分析
Server Software: BWS/1.1 #表示目标使用的服务器,这里是百度使用的baidu web server,类似于Nginx
Server Hostname: www.baidu.com #被测主机名
Server Port: 443 #被测主机的服务端口号,一般http请求的默认端口号是80,https默认使用443端口
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 #目标使用的加密协议
Document Path: / #请求的具体文件
Document Length: 227 bytes # 请求的文件index.html大小
Concurrency Level: 100 # 并发级别,也就是并发数,请求中-c参数指定的数量
Time taken for tests: 3.942 seconds #本次测试总共花费的时间
Complete requests: 500 #本次测试总共发起的请求数量
Failed requests: 0 #请求失败的数量。因网络原因或服务器性能原因,发起的请求并不一定全部成功,通过该数值和Complete requests相除可以计算请求的失败率,作为测试结果的重要参考。
Total transferred: 540985 bytes #总共传输的数据量,指的是ab从被测服务器接收到的总数据量,包括index.html的文本内容和请求头信息。
HTML transferred: 113500 bytes #从服务器接收到的index.html文件的总大小,等于Document Length*Complete requests=227 bytes*500=113500 bytes
Requests per second: 126.85 [#/sec] (mean) #平均(mean)每秒完成的请求数:QPS,这是一个平均值,等于Complete requests/Time taken for
tests=500/3.942=126.85
Time per request: 788.333 [ms] (mean) #从用户角度看,完成一个请求所需要的时间
Time per request: 7.883 [ms] (mean, across all concurrent requests) #服务器完成一个请求的时间
Transfer rate: 134.03 [Kbytes/sec] received #网络传输速度。对于大文件的请求测试,这个值很容易成为系统瓶颈所在。要确定该值是不是瓶颈,需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息。
Connection Times (ms)
min mean[+/-sd] median max
Connect: 160 552 365.2 518 1689
Processing: 26 100 62.6 72 422
Waiting: 18 93 61.4 65 422
Total: 186 652 371.3 608 2111
注:这几行组成的表格主要是针对响应时间也就是第一个Time per request进行细分和统计。
一个请求的响应时间可以分成网络链接(Connect),系统处理(Processing)和等待(Waiting)三个部分。
表中min表示最小值; mean表示平均值;[+/-sd]表示标准差(Standard Deviation) ,也称均方
差(mean square error),这个概念在中学的数学课上学过,表示数据的离散程度,数值越大表示数据越分散,系统响应时间越不稳定。 median表示中位数; max表示最大值。
Total是从整个请求所需要的时间的角度来统计的。这里可以看到最慢的一个请求花费了2111ms,这个数据可以在下面的表中得到验证。
Percentage of the requests served within a certain time (ms)
50% 608
66% 626
75% 638
80% 678
90% 1003
95% 1693
98% 1797
99% 1807
100% 2111 (longest request)
注:这个表第一行表示有50%的请求都是在608ms内完成的,可以看到这个值是比较接近平均系统响应时间
以此类推,90%的请求是小于等于1003ms的。
刚才我们看到响应时间最长的那个请求是2111ms,那么显然所有请求(100%)的时间都是小于等于2111毫秒的,也就是表中最后一行的数据肯定是时间最长的那个请求(longest request)。