在Apache服务器的套件中,有一个叫做 ab (ApacheBench) 的工具。
ApacheBench 主要是用来测试Apache服务器执行效率用的
ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求
同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据做为调整服务器设定或程序的依据。
参数说明
01
|
bixiaopeng@172-13-3-157 ~$ ab -h
|
02
|
Usage: ab [options] [http[s]: // ] hostname [:port] /path
|
04
|
//-n 在测试会话中所执行的请求个数。默认时,仅执行一个请求
|
05
|
-n requests Number of requests to perform
|
06
|
//-c 一次产生的请求个数。默认是一次一个。
|
07
|
-c concurrency Number of multiple requests to make
|
08
|
//-t 测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
|
09
|
-t timelimit Seconds to max. wait for responses
|
11
|
-b windowsize Size of TCP send /receive buffer, in bytes
|
13
|
-p postfile File containing data to POST. Remember also to set -T
|
15
|
-u putfile File containing data to PUT. Remember also to set -T
|
16
|
//-T POST数据所使用的Content- type 头信息。
|
17
|
-T content- type Content- type header for POSTing, eg.
|
18
|
'application/x-www-form-urlencoded'
|
19
|
Default is 'text/plain'
|
20
|
//-v 设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
|
21
|
- v verbosity How much troubleshooting info to print
|
22
|
//-w 以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
|
23
|
-w Print out results in HTML tables
|
25
|
-i Use HEAD instead of GET
|
26
|
-x attributes String to insert as table attributes
|
27
|
-y attributes String to insert as tr attributes
|
28
|
-z attributes String to insert as td or th attributes
|
29
|
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复。
|
30
|
-C attribute Add cookie, eg. 'Apache=1234. (repeatable)
|
31
|
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
|
32
|
Inserted after all normal header lines. (repeatable)
|
33
|
-A attribute Add Basic WWW Authentication, the attributes
|
34
|
are a colon separated username and password.
|
35
|
//-P proxy-auth-username:password 对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
|
36
|
-P attribute Add Basic Proxy Authentication, the attributes
|
37
|
are a colon separated username and password.
|
38
|
-X proxy:port Proxyserver and port number to use
|
39
|
-V Print version number and exit
|
40
|
-k Use HTTP KeepAlive feature
|
41
|
-d Do not show percentiles served table.
|
42
|
-S Do not show confidence estimators and warnings.
|
43
|
-g filename Output collected data to gnuplot format file .
|
44
|
-e filename Output CSV file with percentages served
|
45
|
-r Don't exit on socket receive errors.
|
46
|
-h Display usage information (this message)
|
47
|
-Z ciphersuite Specify SSL /TLS cipher suite (See openssl ciphers)
|
48
|
-f protocol Specify SSL /TLS protocol (SSL2, SSL3, TLS1, or ALL)
|
50
|
//-attributes 设置 属性的字符串. 缺陷程序中有各种静态声明的固定长度的缓冲区。另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。它没有完整地实现 HTTP /1 .x; 仅接受某些 '预想' 的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。
|
举个栗子
参数很多,一般我们用 -c 和 -n 参数就可以了. 例如:
01
|
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ab -c 10 -n 1000 http: //www .wirelessqa.com/?p=143
|
02
|
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
|
03
|
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http: //www .zeustech.net/
|
04
|
Licensed to The Apache Software Foundation, http: //www .apache.org/
|
07
|
Benchmarking www.wirelessqa.com (be patient)
|
08
|
Completed 100 requests
|
09
|
Completed 200 requests
|
10
|
Completed 300 requests
|
11
|
Completed 400 requests
|
12
|
Completed 500 requests
|
13
|
Completed 600 requests
|
14
|
Completed 700 requests
|
15
|
Completed 800 requests
|
16
|
Completed 900 requests
|
17
|
Completed 1000 requests
|
18
|
Finished 1000 requests
|
24
|
Server Hostname: www.wirelessqa.com
|
28
|
Document Path: /?p=143
|
29
|
Document Length: 40865 bytes
|
33
|
Time taken for tests: 349.234 seconds
|
34
|
Complete requests: 1000
|
36
|
(Connect: 0, Receive: 0, Length: 674, Exceptions: 0)
|
38
|
Total transferred: 41114189 bytes
|
39
|
HTML transferred: 40889965 bytes
|
40
|
Requests per second: 2.86 [ #/sec] (mean)
|
41
|
Time per request: 3492.343 [ms] (mean)
|
42
|
Time per request: 349.234 [ms] (mean, across all concurrent requests)
|
43
|
Transfer rate: 114.97 [Kbytes /sec ] received
|
47
|
min mean[+ /-sd ] median max
|
48
|
Connect: 35 161 401.6 59 3394
|
49
|
Processing: 571 3282 2723.1 2648 28374
|
50
|
Waiting: 309 654 767.3 538 21420
|
51
|
Total: 610 3443 2777.4 2826 28514
|
54
|
Percentage of the requests served within a certain time (ms)
|
63
|
100% 28514 (longest request)
|
结果:在同一时间有10个访问请求的情况下,完成1000次请求,失败674次,共花时间349.234秒,这个页面每秒平均处理2.86个请求
具体分析
01
|
//-c 每次发送10个,-n 共发送1000次请求
|
03
|
bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ab -c 10 -n 1000 http: //www .wirelessqa.com/?p=143
|
04
|
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
|
05
|
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http: //www .zeustech.net/
|
06
|
Licensed to The Apache Software Foundation, http: //www .apache.org/
|
08
|
Benchmarking www.wirelessqa.com (be patient)
|
09
|
Completed 100 requests
|
10
|
Completed 200 requests
|
11
|
Completed 300 requests
|
12
|
Completed 400 requests
|
13
|
Completed 500 requests
|
14
|
Completed 600 requests
|
15
|
Completed 700 requests
|
16
|
Completed 800 requests
|
17
|
Completed 900 requests
|
18
|
Completed 1000 requests
|
19
|
Finished 1000 requests
|
24
|
Server Hostname: www.wirelessqa.com
|
29
|
Document Path: /?p=143
|
31
|
Document Length: 40865 bytes
|
36
|
Time taken for tests: 349.234 seconds
|
38
|
Complete requests: 1000
|
40
|
//Failed requests给出了失败原因统计:
|
41
|
//Connect :无法送出请求,目标主机连接失败,要求过程中连线被中断
|
42
|
//Length :回应的内容长度不一致,以content-Length头文件为判断依据
|
43
|
//Exception :发生了无法预期的错误
|
44
|
// 备注1:这里分析一下为何失败了674次,从下面的统计数据我们可以看出,失败请求都落在Length上面,原因是被测网页是动态内容,当第一次发出HTTP request与后面发出的HTTP request所响应的html Length是不同大小的(即每次响应的Content-Length大小不一致),所以才会引起Length失败,这里Length是以第一次取得的Content-Length为主,以后得到的Content-Length跟第一次的不一致,就会报Length错误,所以这类Length大小不一的失败在测试动态面面的压力测试中是合理的,可以不用管它。
|
46
|
(Connect: 0, Receive: 0, Length: 674, Exceptions: 0)
|
50
|
Total transferred: 41114189 bytes
|
52
|
// 备注2:单个html文件的大小为40865,共发出1000次请求,40865000跟40889965差不多,所以1000次请求应该已经正确送出,没什么问题
|
53
|
HTML transferred: 40889965 bytes
|
54
|
// 关键指标之一,相当于 LR 中的 每秒事务数 ,后面括号中的 mean 表示这是一个平均值
|
55
|
Requests per second: 2.86 [ #/sec] (mean)
|
56
|
// 关键指标之二,相当于 LR 中的 平均事务响应时间 ,后面括号中的 mean 表示这是一个平均值
|
57
|
Time per request: 3492.343 [ms] (mean)
|
58
|
// 每个请求实际运行时间的平均值,就是上面的时间 除以并发数
|
59
|
Time per request: 349.234 [ms] (mean, across all concurrent requests)
|
62
|
// 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
|
63
|
Transfer rate: 114.97 [Kbytes /sec ] received
|
67
|
min mean[+ /-sd ] median max
|
68
|
Connect: 35 161 401.6 59 3394
|
69
|
Processing: 571 3282 2723.1 2648 28374
|
70
|
Waiting: 309 654 767.3 538 21420
|
71
|
Total: 610 3443 2777.4 2826 28514
|
73
|
// 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于2826 毫秒,66% 的用户响应时间小于3636 毫秒,最大的响应时间小于28514毫秒
|
74
|
Percentage of the requests served within a certain time (ms)
|
75
|
50% 2826 // 就是有50%的请求都是在2826ms内完成的
|
83
|
100% 28514 (longest request)
|