xiaobaoqiu Blog

Think More, Code Less

AB简单使用

简单熟悉Apache附带的压测工具ab,它非常容易使用,ab可以直接在Web服务器本地发起测试请求。

需要清楚的是,ab进行一切测试的本质都是基于HTTP,所以可以说它是对于Web服务器软件的黑盒性能测试,它获得的一切数据和计算结果,都可以通过HTTP来解释。

本文的ab版本信息:

1
2
3
4
xiaobaoqiu@xiaobaoqiu:~/octopress/source/images/io$ ab -V
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/

1.参数

所有的参数及意义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     总请求数目,要访问页面的次数,默认为1
    -c concurrency  同一时刻的并发请求数目,默认1
    -t timelimit    测试进行的最大秒数,内部隐含值为50000,默认无时间限制
    -s timeout      response超时时间,默认30秒
    -b windowsize   TCP buffer的大小,单位是bytes
    -B address      指定发出请求的本地ip地址
    -p postfile     包含待POST的数据的文件,需要设置参数-T
    -u putfile      包含待PUT的数据的文件,需要设置参数-T
    -T content-type POST/PUT 数据的Content-type header信息, 比如.
                    'application/x-www-form-urlencoded'
                    默认是'text/plain'
    -v verbosity    设置显示信息的详细程度,- 
                    4或者更大的值会显示头信息,3或者更大的值可以显示响应代码(200等),2或者更大可以显示警告和其他信息。
    -w              已html表格的形式输出结果
    -i              执行HEAD请求,而不是GET
    -x attributes   设置<table>属性的字符串,此属性被填入<table 这里>
    -y attributes   设置<tr>属性的字符串
    -z attributes   设置<td>或者<th>属性的字符串
    -C attribute    对请求附加一个Cookie行,其典型形式是name=value的一个参数对,  
                    此参数可以重复。
    -H attribute    对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含
                    了以冒号分隔的字段和值的对 (如, "Accept-Encoding: zip/zop;8bit")
    -A attribute    对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形
                    式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
    -P attribute    对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64
                    编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
    -X proxy:port   对请求使用代理服务器
    -V              版本信息
    -k              启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。 
                    默认时,不启用KeepAlive功能Use HTTP KeepAlive feature
    -d              不显示"percentage served within XX [ms] table"的消息.
    -S              Do not show confidence estimators and warnings.
    -q              如果处理的请求数大于150,  
                    ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。 此-q标记可以抑制这些信息。
    -g filename     Output collected data to gnuplot format file.
    -e filename     产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求 
                    所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
    -r              socket接收错误的时候也不退出
    -h              显示usage信息

2.简单使用及结果解析

就对我的博客进行压测,结果如下,简单加入了一些我的注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
xiaobaoqiu@xiaobaoqiu:~/octopress/source/images/io$ ab -n 10 -c 2 -s 10 http://xiaobaoqiu.github.io/
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 xiaobaoqiu.github.io (be patient).....done


Server Software:        GitHub.com
Server Hostname:        xiaobaoqiu.github.io
Server Port:            80

Document Path:          /
Document Length:        287269 bytes

Concurrency Level:      2
Time taken for tests:   20.788 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      2877109 bytes
HTML transferred:       2872690 bytes
Requests per second:    0.48 [#/sec] (mean)
Time per request:       4157.564 [ms] (mean)    #每个请求的时间
Time per request:       2078.782 [ms] (mean, across all concurrent requests)
Transfer rate:          135.16 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       59  402 717.5     94    2234
Processing:   362 3674 3112.7   3479    8508
Waiting:       60  164 132.8    100     407
Total:        422 4076 3420.4   3558    8602

Percentage of the requests served within a certain time (ms)
  50%   3558        #50%的请求响应时间小于3558毫秒
  66%   7110
  75%   7312
  80%   8544
  90%   8602
  95%   8602
  98%   8602
  99%   8602
 100%   8602 (longest request)  #请求的最长响应时间为8602毫秒