Apache Benchmark(ab)使用

ache Benchmark简称为ab,是apache自带的用于HTTP Server测试的工具。它可以接受单一的URL,然后重复地按照指定的多个独立线程的方式加载,并使用不同的命令行参数控制访问的次数、最大的并发访问数等。另外一项不错的功能是可以输出比较详细的报告。

 

语法 
ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]hostname[:port]/path 

选项 
-A auth-username:password 
向服务器提供基本认证信息。用户名和密码之间由一个":"隔开,并将被以base64编码形式发送。无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送。 
-c concurrency 
一次产生的请求个数。默认是一次一个。 
-C cookie-name=value 
对请求附加一个"Cookie:"头行。其典型形式是 name=value 的一个参数对。此参数可以重复。 
-d 
不显示"percentage served within XX [ms] table"消息(为以前的版本提供支持)。 
-e csv-file 
产生一个逗号分隔(CSV)文件,其中包含了处理每个相应百分比请求(从1%到100%)所需要的相应百分比时间(以微秒为单位)。由于这种格式已经"二进制化",所以比"gnuplot"格式更有用。 
-g gnuplot-file 
把所有测试结果写入一个"gnuplot"或者TSV(以Tab分隔)文件。此文件可以方便地导入到 Gnuplot, IDL, Mathematica, Excel中。其中的第一行为标题。 
-h 
显示使用方法的帮助信息。 
-H custom-header 
对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值(如:"Accept-Encoding: zip/zop;8bit")。 
-i 
执行HEAD请求,而不是GET 。 
-k 
启用KeepAlive功能,即在一个HTTP会话中执行多个请求。默认不启用KeepAlive功能。 
-n requests 
在测试会话中所执行的请求个数。默认仅执行一个请求,此时其结果不具有意义。 
-p POST-file 
包含了POST数据的文件。 
-P proxy-auth-username:password 
对一个中转代理提供基本认证信息。用户名和密码由一个":"隔开,并将被以base64编码形式发送。无论服务器是否需要(即是否发送了407代理认证需求代码),此字符串都会被发送。 
-q 
如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此 -q 标记可以屏蔽这些信息。 
-s 
用于编译中(ab -h 会告诉你)使用了SSL的受保护的https ,而不是http协议的时候。此功能是实验性的,最好不要用。 
-S 
不显示中值和标准偏差值,而且在均值和中值为标准偏差值的1到2倍时,也不显示警告或出错信息。默认时,会显示最小值/均值/最大值等数值。(为以前的版本提供支持) 
-t timelimit 
测试所进行的最大秒数。内部隐含值是"-n 50000"。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。 
-T content-type 
POST数据时所使用的"Content-type"头信息。 
-v verbosity 
设置显示信息的详细程度,4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。 
-V 
显示版本号并退出。 
-w 
以HTML表格形式输出结果。默认时,它是白色背景的两列宽度的一张表。 
-x <table>-attributes 
设置<table>属性的字符串。此属性被填入<table 这里 > 。 
-X proxy[:port] 
对请求使用代理服务器。 
-y <tr>-attributes 
设置<tr>属性的字符串。 
-z <td>-attributes 
设置<td>属性的字符串。

 

用例

1.测试本机apache

 1 E:\cluster>ab -k -n 1000 -c 100 http://localhost/
 2 This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
 3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 4 Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/
 5 
 6 Benchmarking localhost (be patient)
 7 Completed 100 requests
 8 Completed 200 requests
 9 Completed 300 requests
10 Completed 400 requests
11 Completed 500 requests
12 Completed 600 requests
13 Completed 700 requests
14 Completed 800 requests
15 Completed 900 requests
16 Finished 1000 requests
17 
18 
19 Server Software:        Apache/2.0.52
20 Server Hostname:        localhost
21 Server Port:            80
22 
23 Document Path:          /
24 Document Length:        1494 bytes
25 
26 Concurrency Level:      100
27 /*整个测试持续的时间*/
28 Time taken for tests:   3.296875 seconds
29 /*完成的请求数量*/
30 Complete requests:      1000
31 /*失败的请求数量*/
32 Failed requests:        0
33 Write errors:           0
34 /*保持联机连接的请求数量。只有在命令行中使用-k,才能看到该属性值。*/
35 Keep-Alive requests:    1000
36 /*整个场景中的网络传输量*/
37 Total transferred:      1987070 bytes
38 /*整个场景中的HTML内容传输量*/
39 HTML transferred:       1494000 bytes
40 /*每秒钟平均处理的请求数*/
41 Requests per second:    303.32 [#/sec] (mean)
42 /*每个线程下的一组请求平均消耗时间*/
43 Time per request:       329.688 [ms] (mean)
44 /*并发的每个请求平均消耗时间*/
45 Time per request:       3.297 [ms] (mean, across all concurrent requests)
46 /*平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题*/
47 Transfer rate:          588.44 [Kbytes/sec] received
48 
49 Connection Times (ms)
50               min  mean[+/-sd] median   max
51 Connect:        0    0   0.8      0      15
52 Processing:     0  212  69.4    218     406
53 Waiting:        0  211  69.5    218     406
54 Total:          0  212  69.3    218     406
55 /*下面的内容为整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中 50% 的用户响应时间小于 218 毫秒,66 % 的用户响应时间小于 234 毫秒,最大的响应时间小于 406 毫秒*/
56 
57 Percentage of the requests served within a certain time (ms)
58   50%    218
59   66%    234
60   75%    250
61   80%    265
62   90%    296
63   95%    312
64   98%    343
65   99%    359
66  100%    406 (longest request)

如果你设置的-c过大,比如在windows下大于65可能出现的错误,以下是网上收集的解决办法:

使用ab的时候当并发数超过1024就会示出错:
windows下提示:apr_pollset_create failed: Invalid argument (22)
linux下提示:socket: Too many open files (24)

下面是从CSDN转的一篇linux下的解决办法
=======================================
ab测试apache出错的解决办法 http://blog.csdn.net/answerzy/archive/2007/11/19/1892194.aspx 
[root@answer bin]# ./ab -n 20000 -c 2000 http://192.168.2.60/ 
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.2.60 (be patient)
socket: Too many open files (24)

解决办法: bash自带的ulimit, 各大版本均有提供
ulimit -n 2000(你需要的值)
=======================================
这应该不难理解,linux是通过文件来对设备进行管理,ulimit -n是设置同时打开文件的最大数值,ab中每一个连接打开一个设备文件,所以设置这个值就可以解决了。

 

下面是windows下的解决办法

TcpTimedWaitDelay

    • 描述:确定 TCP/IP 在释放已关闭的连接并再次使用其资源前必须经过的时间。关闭与释放之间的这段时间称为 TIME_WAIT 状态或者两倍最大段生存期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。通过减少此条目的值,TCP/IP 可以更快地释放关闭的连接,并为新连接提供更多资源。如果运行中的应用程序要求快速释放连接或创建新连接,或者由于多个连接处于 TIME_WAIT 状态而导致吞吐量较低,请调整此参数。
    • 如何查看或设置:

1.     使用 regedit 命令,访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 注册表子键,然后创建新的REG_DWORD 值 TcpTimedWaitDelay。

2.     将此值设置为十进制 30,即十六进制 0x0000001e。此值将等待时间设置为 30 秒。

3.     停止并重新启动系统。

    • 缺省值:0xF0,此值将等待时间设置为 240 秒(4 分钟)。
    • 建议值:最小值为 0x1E,此值将等待时间设置为 30 秒。
  • MaxUserPort
    • 描述:确定当应用程序向系统请求获取可用的用户端口时,TCP/IP 可指定的最高端口号。
    • 如何查看或设置:

1.     使用 regedit 命令,访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 注册表子键,然后创建新的REG_DWORD 值 MaxUserPort。

2.     将此值至少设置为十进制 32768。

3.     停止并重新启动系统。

    • 缺省值:
    • 建议值:至少为十进制 32768。
  • 最大连接储备
    • 描述:如果同时接收到许多连接尝试,请增大操作系统支持的缺省暂挂连接数。
    • 如何查看或设置:

1.     使用 regedit 命令并访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters 注册表子键。

2.     根据需要创建并设置下列值:

3. "EnableDynamicBacklog"=dword:00000001

4.  

5. "MinimumDynamicBacklog"=dword:00000020

6.  

7. "MaximumDynamicBacklog"=dword:00001000

8.  

"DynamicBacklogGrowthDelta"=dword:00000010

9.     这些值将最小可用连接数设置为 20,将最大可用连接数设置为 1000。每当可用连接数小于最小可用连接数时,可用连接数都会增加 10。

10. 停止并重新启动系统。

  • KeepAliveInterval
    • 描述:确定 TCP 在未接收到响应时重新尝试保持活动传输的频率。
    • 如何查看或设置:

1.     使用 regedit 命令,访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters 注册表子键,然后创建新的REG_DWORD 值 KeepAliveInterval。

2.     将此值设置为 1 秒。

3.     停止并重新启动系统。

    • 缺省值:1 秒
    • 建议值:

另外作者在window xp测试时,即使设置了TcpTimedWaitDelay与MaxUserPort同样会出现apr_pollset_create failed: Invalid argument (22)错误。后下载其他版本后竟然可用,经过检查发现,本机安装的ab.exe的版本是Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0,而另外下载的版本是:Version 2.0.40-dev <$Revision: 1.1246 $> apache-2.0,下载地址:http://www.9enjoy.com/attachment.php?fid=18

 

参考资料

http://httpd.apache.org/docs/2.0/programs/ab.html

 

 

posted @ 2012-06-13 06:49  wgw8299  阅读(1111)  评论(0编辑  收藏  举报