ab - Apache HTTP 伺服器效能評量工具
ab
是一個評量 Apache 超文字傳輸協定 (HTTP) 伺服器的工具。它用來快速了解目前 Apache 安裝的執行效能。尤其是了解 Apache 安裝每秒能服務的請求數量。

另請參閱
ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -E client-certificate file ] [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -l ] [ -m HTTP-method ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -r ] [ -s timeout ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [ -Z ciphersuite ] [http[s]://]hostname[:port]/path

-A auth-username:password
- 提供伺服器的 BASIC 認證憑證。使用者名稱與密碼用單一
:
分隔,並以 base64 編碼的形式通過網路傳送。不論伺服器是否要求(例如:已傳送 401 需要認證),這串字串都會傳輸。
-b windowsize
- TCP 傳送/接收緩衝器的大小,以位元組為單位。
-B 本機地址
- 建立傳送連線時要繫結的地址。
-c 同時處理連線數目
- 一次執行多少個要求。預設是每次一個要求。
-C Cookie 名稱=值
- 在要求中加入
Cookie:
列。引數通常是 名稱=值
配對格式。此欄位可以重複使用。
-d
- 不要顯示「在 XX [ms] 內處理的百分比表格」。 (舊版支援).
-e csv 檔
- 寫入一個逗號分隔值 (CSV) 檔,其中包含每個百分比 (從 1% 到 100%) 處理掉該百分比要求所花費的時間 (以毫秒為單位)。這通常比「gnuplot」檔更有用,因為結果已經「分類」過。
-E 用戶端憑證檔案
- 連接到 SSL 網站時,使用提供的 PEM 格式用戶端憑證向伺服器進行驗證。此檔案應該包含用戶端憑證、中間憑證以及私密金鑰。可以在 2.4.36 及更新版本中使用。
-f 通訊協定
- 指定 SSL/TLS 通訊協定 (SSL2、SSL3、TLS1、TLS1.1、TLS1.2 或 ALL)。TLS1.1 和 TLS1.2 支援功能可在 2.4.4 及更新版本中使用。
-g gnuplot 檔
- 將所有測量值寫入「gnuplot」或 TSV (Tab separate values,以標籤分隔值) 檔。這個檔可以輕鬆地導入到 Gnuplot、IDL、Mathematica、Igor 甚至 Excel 等套件中。標籤位於檔案的第一行。
-h
- 顯示使用說明。
-H 自訂標頭
- 附加額外的標頭到要求中。引數通常是有效標頭行的格式,包含一個冒號分隔的場值配對 (例如,
"Accept-Encoding: zip/zop;8bit"
)。
-i
- 執行
HEAD
要求而不是 GET
要求。
-k
- 啟用 HTTP KeepAlive 功能,例如,在一個 HTTP 瀏覽中執行多個要求。預設為不使用 KeepAlive。
-l
- 如果回應的長度不一致,則不報告錯誤。這對於動態頁面很有用。可以在 2.4.7 及更新版本中使用。
-m HTTP 方法
- 要求的自訂 HTTP 方法。可以在 2.4.10 及更新版本中使用。
-n 要求次數
- 在基準測試中執行的要求次數。預設值是只執行一次要求,這通常會導致不具代表性的基準測試結果。
-p POST 檔
- 包含要 POST 資料的檔。記得也要設定
-T
。
-P proxy 認證使用者名稱:密碼
- 提供 BASIC 認證憑據到途中的 proxy。使用者名稱和密碼以單個
:
分隔,並使用 base64 編碼傳送。無論 proxy 是否需要,這個字串都會傳送 (例如,已傳送 407 proxy 認證需求)。
-q
- 在處理超過 150 個要求時,
ab
會在 stderr
中每 10% 或 100 個要求輸出一個進度計數。-q
旗標會抑制這些訊息。
-r
- Socket 收到錯誤時,不要結束。
-s timeout
- Socket 在逾時之前的等待時間,以秒為單位。預設為 30 秒。在 2.4.4 及更新版本中提供。
-S
- 不要顯示中位數及標準差數值,或者在平均值及中位數超過標準差一或兩倍時,不要顯示警告/錯誤訊息。預設為 min/avg/max 數值(舊支援)。
-t timelimit
- 花費在基準測試的秒數上限。對應到內部的
-n 50000
。使用此選項在固定的總時間內對伺服器執行基準測試。預設沒有時間限制。
-T content-type
- 用於 POST/PUT 資料的內容類型標頭,例如:
application/x-www-form-urlencoded
。預設為 text/plain
。
-u PUT-file
- 包含要 PUT 的資料之檔案。記住也要設定
-T
。
-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>
屬性的字串。
-Z ciphersuite
- 指定 SSL/TLS 加密套件(請參閱 openssl ciphers)

下列清單說明 ab
返回的值
- 伺服器軟體
- 如果有值傳回,則在第一個成功回應的 server HTTP 標頭中傳回。這包含標頭中從頭到發生偵測到十進位值為 32 的字元為止的所有字元(最著名的:空白或 CR/LF)。
- 伺服器主機名稱
- 命令列中指定的 DNS 或 IP 位址
- 伺服器通訊埠
- ab 連線的通訊埠。如果命令列中沒有指定通訊埠,則對於 http 的預設值為 80,對於 https 的預設值為 443。
- SSL/TLS 協定
- 在用戶端與伺服器之間協商的協定參數。這只會在使用 SSL 時列印出來。
- 文件路徑
- 從命令列字串解析的要求 URI。
- 文件長度
- 這是第一個成功傳回的文件的位元組大小。如果文件長度在測試期間變更,則回應會視為發生錯誤。
- 並行等級
- 在測試期間使用並行的用戶端數目
- 用於測試的時間
- 這是從建立第一個 socket 連線到收到最後一個回應的時間
- 完整要求
- 收到的成功回應數目
- 失敗要求
- 被視為失敗的要求數目。如果數目大於零,將會列印另一行,顯示因連線、讀取、不正確的內容長度或例外情況而失敗的要求數目。
- 寫入錯誤
- 寫入 (中斷管線) 期間失敗的錯誤數目。
- 非 2xx 回應
- 非 200 系列回應代碼的回應數目。如果所有回應都是 200,此欄位不會列印。
- Keep-Alive 要求
- 導致 Keep-Alive 要求的連線數目
- 總共傳送的主體
- 若設定為在測試過程中傳送資料,這表示在測試過程中傳送的總共位元組數。如果測試不包括要傳送的主體,則略過此欄位。
- 總共傳輸
- 從伺服器接收到的總位元組數。此數字本質上是透過線路傳送的位元組數。
- 傳輸的 HTML
- 從伺服器接收到的總文件位元組數。此數字不包含在 HTTP 標頭中接收到的位元組
- 每秒要求
- 這是每秒的要求數目。此值是將要求數目除以總花費時間的結果
- 每個要求的時間
- 每個要求花費的平均時間。第一個值是使用公式
concurrency * timetaken * 1000 / done
計算,而第二個值是使用公式 timetaken * 1000 / done
計算
- 傳輸率
- 使用公式
totalread / 1024 / timetaken
計算的傳輸率

有各種以固定長度靜態宣告的緩衝區。再加上命令列引數、伺服器回應標頭和其它外部輸入的延遲分析,這可能會給你帶來困擾。
並未完全實作 HTTP/1.x;只接受某些「預期的」回應形式。大量使用 strstr(3)
顯示在設定檔的最上方,這可能表示效能有問題;也就是說,你會測量到 ab
的效能,而不是伺服器的效能。