1 概述
ab(ApacheBench)是Apache自帶的超文本傳輸協議(HTTP)性能測試工具。 其設計意圖是描繪當前所安裝的Apache的執行性能, 主要是顯示你安裝的Apache每秒可以處理多少個請求。
2 使用
2.1 安裝
Apache服務器套件自帶ab,只要安裝Apache即可,無需另行安裝ab。ab位于%ApacheHome%/bin目錄下(“%ApacheHome%”為Aapche安裝路徑),你也可以把ab.exe文件copy出來,獨立使用。
2.2 參數列表
-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>
屬性的字符串。
以上參數最常用的是-n 在測試會話中所執行的請求個數;和-c 一次同時產生的并發請求個數。
2.3 實例
假設我們要測試一下本網站,其中一個性能測試用例是:“同時處理50個并發請求并運行 100 次index.php 首頁”,我們可以在cmd shell中輸入 ab -n 1000 -c 50 http://www.86956464.com/index.php,運行結束后,ab會自動顯示測試結果,如下:
C:\wamp\Apache2\bin>ab -n 100 -c 50 http://www.86956464.com/index.php
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 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.86956464.com (be patient).....done
Server Software: Apache/2.0.52
Server Hostname: www.86956464.com
Server Port: 80
Document Path: /index.php
Document Length: 21380 bytes
Concurrency Level: 50
Time taken for tests: 66.328125 seconds
Complete requests: 100
Failed requests: 15
(Connect: 0, Length: 15, Exceptions: 0)
Write errors: 0
Non-2xx responses: 15
Total transferred: 1856980 bytes
HTML transferred: 1822145 bytes
Requests per second: 1.51 [#/sec] (mean)
Time per request: 33164.063 [ms] (mean)
Time per request: 663.281 [ms] (mean, across all concurrent requests)
Transfer rate: 27.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 31 41 8.5 46 62
Processing: 32 20242 9776.5 22015 43890
Waiting: 31 1637 1327.6 1156 6078
Total: 78 20283 9778.3 22046 43921
Percentage of the requests served within a certain time (ms)
50% 22046
66% 24812
75% 26656
80% 27796
90% 30421
95% 30734
98% 31921
99% 43921
100% 43921 (longest request)
C:\wamp\Apache2\bin>
以上結果指出,在并發50個請求的情況下,完成100次的訪問請求,共花了66.328125秒,這個程序每秒可處理1.51個請求。
2.4 問題
在實際使用中,我發現-c 參數,即一次同時產生的并發請求個數最多設置成64,大于等于65就會報錯,不知道為什么。