1.AB简介
AB是Apache自带的压力测试工具。AB非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如Nginx、Tomcat、IIS等。
AB对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
AB是一条命令,集成在了HTTPD-Tools工具中。
2.安装AB到CentOS
系统版本:CentOS Linux release 7.3.1611 (Core)
软件版本:httpd-tools-2.4.6
硬件要求:无
2.1.安装YUM-EPEL源
HTTP-Tools软件包由YUM-EPEL源提供。
[root@localhost ~]# yum -y install epel-release.noarch
2.2.安装HTTPD-Tools
[root@localhost ~]# yum -y install httpd-tools
3.AB命令详解
语法: ab [选项] 访问地址
选项:
-n requests 要执行的请求总数。
-c concurrency 一次发出多个请求的数量。
-t timelimit 设置测试的最大时长,单位为秒。
-s timeout 设置响应超时时间,单位为秒,默认为30秒。
-b windowsize 设置TCP发送/接受缓冲区的大小,单位为字节。
-B address 当有多张网卡时,设置进行传出连接时绑定的网卡地址。
-p postfile 设置POST请求包含的数据文件。需要与"-T"选项一起连用。
-u putfile 设置PUT请求所包含的数据文件。需要与"-T"选项一起连用。
-T content-type 设置POST/PUT请求时指定的数据MIME类型的头部信息,默认值为"text/plain"。
-w 以HTML网页的方式显示结果。
-i 使用HEAD方法请求而不是GET方法。
-C attribute 添加cookie,例如:'Apache=1234'。
-H attribute 添加任意标头,例如:'Accept-Encoding:gzip',在所有正常标题行之后插入此信息。
-A attribute 添加基本的网络身份验证,属性是以冒号分割的用户名和密码。
-P attribute 添加基本的代理身份验证,属性是以冒号分割的用户名和密码。
-X proxy:port 设置要使用的代理服务器地址和端口。
-V 显示软件版本号并退出。
-k 使用HTTP Keepalive保持长连接功能。
-d 不显示百分比报告信息。
-S 不显示置信度估算值和警告信息。
-q 执行超过150个请求不要显示进度。
-g filename 将收集到的数据输出到Gnuplot格式的文件中。
-e filename 将收集到的数据输出到已提供百分比的CSV文件中。
-r 在接受到套接字错误不会退出。
-h 显示使用信息。
-Z ciphersuite 设置SSL/TLS密码套件(请参阅OpenSSL)。
-f protocol 设置支持的SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)。
4.使用AB对WEB服务进行压测
4.1.调整系统限制
系统默认情况下允许一个进程同时打开的文件描述符数量是1024,若我们需要进行超过1024并发测试的话,可能需要调高此值,客户端和服务端都需要调整。
[root@localhost ~]# ulimit -n 65535 => 设置进程并发文件数(当前生效)
[root@localhost ~]# vim /etc/security/limits.conf => 设置进程并发文件数(永久生效)
# 用户 软硬限制 限制类型 值
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
# * 表示所有用户。
# soft 软限制,当用户使用超出设定值系统会发出告警。
# hard 硬限制,绝对限制,用户使用绝对不能超出设置的值。
# nofile 限制类型,进程可同时打开的并发文件描述符数量。
[root@localhost ~]# ulimit -n
65535
4.2.开始测试
我们在进行压力测试的时候应合理的从小到大一段一段测试WEB服务器负载,并通过压力测试了解WEB服务器的资源瓶颈,根据业务需求合理的采购服务器。
[root@localhost ~]# ab -n 1000 -c 100 -s 30 http://www.szaybc.com/
# -n 设置请求总数量。
# -c 设置并发请求数量。
# -s 设置请求超时时间。
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.szaybc.com (be patient)
开始基准测试(请耐心等待)
Completed 100 requests 完成100个请求
Completed 200 requests 完成200个请求
Completed 300 requests 完成300个请求
Completed 400 requests 完成400个请求
Completed 500 requests 完成500个请求
Completed 600 requests 完成600个请求
Completed 700 requests 完成700个请求
Completed 800 requests 完成800个请求
Completed 900 requests 完成900个请求
Completed 1000 requests 完成1000个请求
Finished 1000 requests 完成了1000个请求
Server Software: nginx/1.13.1 服务器软件
Server Hostname: www.szaybc.com 服务器主机名
Server Port: 80 服务器端口
Document Path: / 文件路径
Document Length: 65732 bytes 文件长度(大小)
Concurrency Level: 100 并发级别(数量),并发用户数量
Time taken for tests: 5.713 seconds 测试时间,完成所有请求所花费的时间
Complete requests: 1000 完成请求数
Failed requests: 0 失败请求数
Write errors: 0 写入错误
Total transferred: 65969000 bytes 总传输数据大小
HTML transferred: 65732000 bytes 总传输HTML数据大小
Requests per second: 175.04 [#/sec](mean)
吞吐率,每秒能完成请求处理的数量。计算:吞吐率=完成请求数/测试时间
Time per request: 571.302 [ms](mean)
所有并发用户都请求一次的等待时间(平均值),单位为毫秒。计算:测试时间/(完成请求数/并发用户数量)
Time per request: 5.713 [ms](mean, across all concurrent requests)
单个用户请求一次的等待时间(平均值),单位为毫秒。计算:所有并发用户都请求一次的等待时间/并发用户数量
Transfer rate: 11276.50 [Kbytes/sec] received
接受响应数据的传输速率,单位KB/S。计算:传输速率=总传输数据大小/测试时间
Connection Times (ms)
连接时间(毫秒)
min mean[+/-sd] median max 最小值 平均值 标准差 中间值 最大值
Connect: 1 33 14.9 29 108 网络连接时间:
Processing: 14 530 35.7 539 603 系统处理时间:
Waiting: 2 43 16.6 42 129 等待时间:
Total: 15 563 32.0 566 650 请求完成总时间:
Percentage of the requests served within a certain time (ms)
按完成请求的百分比,得出完成请求中花费时间最长的那一个请求的时间,也就是这些请求完成时间的最大值,单位为毫秒
50% 566 50%请求完成时间的最大值是566毫秒
66% 569 66%请求完成时间的最大值是569毫秒
75% 570 75%请求完成时间的最大值是570毫秒
80% 571 80%请求完成时间的最大值是571毫秒
90% 578 90%请求完成时间的最大值是578毫秒
95% 625 95%请求完成时间的最大值是625毫秒
98% 626 98%请求完成时间的最大值是626毫秒
99% 627 99%请求完成时间的最大值是627毫秒
100% 650 (longest request) 100%请求完成时间的最大值是650毫秒(最长请求)