Apache 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



































































如果你設置的-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