ab的全稱是ApacheBench,是 Apache 附帶的一個小工具,專門用於 HTTP Server 的benchmark testing,能夠同時模擬多個併發請求。前段時間看到公司的開發人員也在用它做一些測試,看起來也不錯,很簡單,也很容易使用,因此今天花一點時間看了一下。html
經過下面的一個簡單的例子和註釋,相信你們能夠更容易理解這個工具的使用。
進入apache的bin目錄算法
缺點:一次只能測試一條URLapache
/*在這個例子的一開始,我執行了這樣一個命令 ab -n 10 -c 10 http://www.google.com/。這個命令的意思是啓動 ab ,向 www.google.com 發送10個請求(-n 10) ,並每次發送10個請求(-c 10)——也就是說一次都發過去了。跟着下面的是 ab 輸出的測試報告,紅色部分是我添加的註釋。*/服務器
C:\Program Files\Apache Software Foundation\Apache2.2\bin>ab -n 10 -c 10 httpcookie
://www.google.com/網絡
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 www.google.com (be patient).....donegoogle
Server Software: GWS/2.1
Server Hostname: www.google.com
Server Port: 80
Document Path: /
Document Length: 230 bytes
Concurrency Level: 10
/*整個測試持續的時間*/
Time taken for tests: 3.234651 seconds
/*完成的請求數量*/
Complete requests: 10
/*失敗的請求數量*/
Failed requests: 0
Write errors: 0
Non-2xx responses: 10
Keep-Alive requests: 10
/*整個場景中的網絡傳輸量*/
Total transferred: 6020 bytes
/*整個場景中的HTML內容傳輸量*/
HTML transferred: 2300 bytes
/*你們最關心的指標之一,至關於 LR 中的 每秒事務數 ,後面括號中的 mean 表示這是一個平均值*/
Requests per second: 3.09 [#/sec] (mean)
/*你們最關心的指標之二,至關於 LR 中的 平均事務響應時間 ,後面括號中的 mean 表示這是一個平均值*/
Time per request: 3234.651 [ms] (mean)
/*這個還不知道是什麼意思,有知道的朋友請留言,謝謝 ^_^ */
Time per request: 323.465 [ms] (mean, across all concurrent requests)
/*平均每秒網絡上的流量,能夠幫助排除是否存在網絡流量過大致使響應時間延長的問題*/
Transfer rate: 1.55 [Kbytes/sec] received
/*網絡上消耗的時間的分解,各項數據的具體算法還不是很清楚*/
Connection Times (ms)
min mean[+/-sd] median max
Connect: 20 318 926.1 30 2954
Processing: 40 2160 1462.0 3034 3154
Waiting: 40 2160 1462.0 3034 3154
Total: 60 2479 1276.4 3064 3184
/*下面的內容爲整個場景中全部請求的響應狀況。在場景中每一個請求都有一個響應時間,其中 50% 的用戶響應時間小於 3064 毫秒,60 % 的用戶響應時間小於 3094 毫秒,最大的響應時間小於 3184 毫秒*/
Percentage of the requests served within a certain time (ms)
50% 3064
66% 3094
75% 3124
80% 3154
90% 3184
95% 3184
98% 3184
99% 3184
100% 3184 (longest request)
ab [ -A auth-username ] [ -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 ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]hostname[:port]/path
選項
-A auth-username:password 對服務器提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以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, Igor甚至Excel中。 其中的第一行爲標題。 -h 顯示使用方法。 -H custom-header 對請求附加額外的頭信息。 此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對 (如, "Accept-Encoding: zip/zop;8bit"). -i 執行HEAD請求,而不是GET。 -k 啓用HTTP KeepAlive功能,即, 在一個HTTP會話中執行多個請求。 默認時,不啓用KeepAlive功能. -n requests 在測試會話中所執行的請求個數。 默認時,僅執行一個請求,但一般其結果不具備表明意義。 -p POST-file 包含了須要POST的數據的文件. -P proxy-auth-username:password 對一箇中轉代理提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以base64編碼形式發送。 不管服務器是否須要(即, 是否發送了401認證需求代碼),此字符串都會被髮送。 -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>屬性的字符串.