ApacheBench是Apache附带的一个小工具,可以做http服务器的压力测试,可以同时模拟多个并发请求,该工具是安装apache时默认安装的,在apache/bin目录下面。如果要使用该工具,需要已安装apache,apache的安装在此不做说明。
该工具可以给网站做压力测试,测试网站的请求处理速度,并发请求瓶颈等。
命令格式:
ab [options][http://]hostname[:port]/path
参数介绍:
-n requests Number of requests to perform
做一次测试所发送的请求数,默认是1次请求
-c concurrency Number of multiple requests tomake
每次请求的并发数
-t timelimit Seconds to max. wait for responses
测试所进行的最大秒数,,可以将一次测试控制在等待多少秒内,默认没有时间限制
-p postfile File containing data to POST
测试请求包含的post数据
-T content-type Content-type header for POSTing
POST数据需要声明的Content-type头信息
-vverbosity Howmuch troubleshooting info to print
打印的信息的长度,
4或更大值会显示头信息,3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V显示版本号并退出
-w Print out results in HTML tables
以HTML表格的形式输出测试结果
-i Use HEAD instead of GET
用HEAD请求代替GET
-x attributes String to insert astable attributes
table表格的属性
-y attributes String to insert astr attributes
表格中tr的属性
-z attributes String to insert astd or th attributes
表格中td/th的属性
-C attribute Addcookie, eg. 'Apache=1234. (repeatable)
对请求附加cookie设置,格式是name=value,该命令可重复设置多个cookie
-H attribute AddArbitrary header line, eg. 'Accept-Encoding: gzip' Inserted afterall normal header lines. (repeatable)
设置head的参数,例如接收的压缩格式为gzip
-A attribute AddBasic WWW Authentication, the attributes are a colon separatedusername and password.
-P attribute AddBasic Proxy Authentication, the attributes are a colon separatedusername and password.
-X proxy:port Proxyserver and portnumber to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-h Display usage information (this message)
该工具有很多参数,这里水平有限,有些自己也没用过,不做说明,基本我们常用的命令已经给出了解释。
启动该工具的方式,开始->运行->cmd,进入dos模式,然后进入到apache\bin目录。
我们以google.com作为测试对象,来具体分析一下返回的结果。
执行命令:ab -n100 -c 10 http://www.google.com/
此命令为向google.com发送100次请求,并且每次请求附带10个并发请求
返回结果:
ServerSoftware: gws
谷歌所用的网站服务器基于apache开发且对谷歌程序优化版
ServerHostname: www.google.com
ServerPort: 80
DocumentPath: /
DocumentLength: 376 bytes
ConcurrencyLevel: 10
并发数为10
Time taken for tests: 5.609seconds
整个测试所花费的时间 5.609秒
Completerequests: 100
请求完成数100
Failedrequests: 0
Writeerrors: 0
Non-2xxresponses: 100
Totaltransferred: 92755 bytes
HTMLtransferred: 37600 bytes
Requests persecond: 17.83[#/sec] (mean)
每秒处理的请求数
Time perrequest: 560.938 [ms] (mean)
每次请求的平均处理时间(毫秒)
Time perrequest: 56.094 [ms] (mean, across all concurrent requests)
每次请求中处理每个并发所用的时间
Transferrate: 16.15 [Kbytes/sec] received
//-----------------------
Connection Times (ms)
min mean[+/-sd]median max
Connect: 47 55 7.8 63 63
连接时间 最小为47毫秒 最大为63毫秒平均连接时间约为55毫秒
Processing: 63 475 88.7 500 516
处理时间 最小为63毫秒 最大为516毫秒平均处理时间约为516毫秒
Waiting: 47 286136.7 281 516
等待时间
Total: 109 530 88.9 547 563
时间总计
WARNING: The median and mean for the initial connection time arenot within a no
rmal deviation
初始连接时间的平均值不在正常的偏差范围内
These results are probably not that reliable.
-------------------------//以上为本次测试的分析结果,个人不清楚具体的计算过程
Percentage of the requests served within a certain time (ms)
50% 547
66% 563
75% 563
80% 563
90% 563
95% 563
98% 563
99% 563
100% 563 (longest request)
50%的用户请求处理时间小于547毫秒,66%的的用户请求处理时间小于563毫秒,其他的以此类推,最长的请求处理时间不超过563毫秒
由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Timeper request时间约等于第二个Time per request时间乘以并发请求数
在本例中 560.938≈56.094*10