基準測試工具(ab)
ab是什麼? ab是基於命令列的工具,均可運行在windows、linux平台下。 為什麼要選用這個工具? 易於使用,輸入少量指令選項,即可得出結果,同時易於安裝。
安裝ab
win:如果本機有apache的開發環境,那麼ab預設在apache目錄下的bin目錄下,開啟bin目錄可以看到 linux:直接yum install httpd-tools,安裝即可
簡單上手
直接敲入下面程式碼(注意切換ab所在的目錄) -c 10代表並發數是10 -n 10總共進行100次存取 後面接要存取的網址,切記不可缺http://
- D:phpStudyApachebin>ab -c 10 -n 1000 http://example.com/phpinfo.php
複製程式碼
待ab自己跑一下,得出下面結果
- #ab工具的描述,注意其中的版本號
- This is ApacheBench, Version 2.3
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http:// www.apache.org/
-
- #測試結果,共測試1000次,每100次顯示訪問進度,訪問的網站是example.com
- Benchmarking example.com (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
-
- #伺服器的資訊
- Server Software: nginx/1.6.2 #伺服器web軟體
- Server Hostname: nginx/1.6.2 #伺服器web軟體
- Server Hostname: Sample。 🎜>Server Port: 80 #存取埠
-
- #文件資訊
- Document Path: /phpinfo.php #存取的文件
- Document Length: 94804 bytes #傳回結果大小位元組數(包含html ,js,css,圖片及回應中的所有內容位元組數總和)
-
- #連結訊息
- Concurrency Level: 10 #並發數,-c 10 設定了10個並發
- Time taken for tests: 7.498 seconds #總耗時,單位秒
- Complete requests: 1000 #總共請求中已完成的請求總數的和
- Failed requests: 219 #失敗的請求數總和
- (Connect: 0 , Receive: 0, Length: 219, Exceptions: 0)
- Non-2xx responses: 9 #未收到2xx系列成功的請求總數
- Total transferred: 94135779 bytes #整個請求總數中回應總數距的總數大小位元組數,包含頭訊息
- HTML transferred: 93952076 bytes #整個請求總數中正文內容的總大小位元組
- Requests per second: 133.36 [#/sec] (mean) #每秒支援的並發數,這裡是每秒支援133.36個並發
- Time per request: 74.984 [ms] (mean) #完成一個請求的總耗時
- Time per request: 7.498 [ms] (mean, across all concurrent requests ) #完成所有並發請求中一個請求的總耗時
- Transfer rate: 12259.83 [Kbytes/sec] received #每秒收到的字節總數(KB)
-
- #測試的時間結果數據,留意Total一項,10個並發的情況下,完成一個請求,最小耗時(min)9毫秒,最大耗時(max)146毫秒
- Connection Times (ms)
- min mean[ /- sd] median max
- Connect: 0 0 0.7 0 20
- Processing: 9 74 22.2 68 146
- Waiting: 6 73 22.1 67 143
- Waiting: 6 73 22.1 67 143
- Waiting: 6 73 22.1 67 143
- Waiting: 6 73 22.1 67 143
- Haiting: 6 74:22.1 67 143
- Total; #完成請求百分比,例如第一項,50% 68,代表一半的請求在68毫秒內完成,95% 129,代表1000的請求裡,百分之九十八的請求在129毫秒裡完成
- Percentage of the requests served within a certain time (ms)
- 50% 68
- 66% 78
- 75% 86
- 80% 92
- 90% 109
- 80% 92
- 90% 109 98% 129
- 99% 133
100% 146 (longest request)
複製程式碼
ab選項
輸入下面命令得到ab幫助文檔,該幫助文檔,分別說明了用法和命令選項的含義
D:phpStudyApachebin>ab -h
複製程式碼
ab 幫助文件的產出
- 用法:ab [選項] [http://]主機名稱[:連接埠]/路徑
- 選項有:
- -n requests 執行的請求數
- -c concurrency 一次發出的多個請求數
- -t timelimit 最大秒數。花在基準測試上
- 這表示 -n 50000
- -s 最大超時秒數。等待每個回應
- 預設為30 秒
- -b windowsize TCP 發送/接收緩衝區的大小,以位元組為單位
- -B 位址建立傳出連線時綁定的位址
- - p postfile 包含資料的檔案發布。也要記住設定 -T
- -u putfile 包含要 PUT 的資料的檔案。也要記住設定-T
- -T content-type 用於POST/PUT 資料的內容類型標頭,例如
- 'application/x-www-form-urlencoded'
- 預設為'text/ plain'
- -v 詳細程度要列印多少故障排除資訊
- -w 在HTML 表中列印結果
- -i 使用HEAD 而不是GET
- -x 屬性要作為表屬性插入的字串
- -y 屬性作為tr 屬性插入的字串
- -z 屬性作為td 或th 屬性插入的字串
- -C 屬性添加cookie,例如。 '阿帕契=1234'。 (可重複)
- -H 屬性 新增任意標題行,例如。 'Accept-Encoding: gzip'
- 插入到所有正常標題行之後。 (可重複)
- -A 屬性新增基本 WWW 驗證,屬性
- 是冒號分隔的使用者名稱和密碼。
- -P 屬性新增基本代理身份驗證,屬性
- 是冒號分隔的使用者名稱和密碼.
- -X proxy:port 代理伺服器和要使用的連接埠號碼
- -V 列印版本號並退出
- -k 使用HTTP KeepAlive 功能
- -d 不顯示服務表的百分位數。
- - S 不顯示置信度估計器和警告。
- -q 執行超過150 個請求時不顯示進度
- -l 接受可變文件長度(將其用於動態頁面)
-
- -g 檔案名稱輸出將收集的資料儲存為gnuplot格式文件。
- -e filename 輸出 CSV 文件,並提供服務百分比
- -r 不要在套接字接收錯誤時退出。
- -m method 方法名稱
- -h 顯示使用資訊(這則訊息)
複製程式碼
英文看不懂,附上中文解釋,網上抄的,我沒試過
- -n 即時請求數,用於指定壓力測試的並發數。
- -c 即時並發數,用於指定壓力測試的並發數。
- -t 即時timelimit,等待反應的最大時間(單位:秒)。
- -b 即windowsize,TCP發送/接收的緩衝大小(單位:位元組)。
- -p 即postfile,發送POST請求時需要上傳的文件,另外還必須設定-T參數。
- -u 即putfile,發送PUT請求時需要上傳的文件,另外還必須設定-T參數。
- -T 即content-type,用於設定Content-Type請求標頭訊息,例如:application/x-www-form-urlencoded,預設值為text/plain。
- -v表示詳細程度,指定列印幫助資訊的印表機等級。
- -w以HTML表格形式列印結果。
- -i 使用HEAD請求代替GET請求。
- -x 插入字串作為td標籤的屬性。
- -y 插入字串作為tr標籤的屬性。
- -z 插入字串作為td標籤的屬性
- -C 新增cookie訊息,例如:"Apache=1234"(可以重複該參數選項以新增多個)。
- -H 新增任意的請求頭,例如:"Accept-Encoding: gzip",之後請求頭將在現有的多個請求頭中新增(可以重複該參數選項以新增多個)。
- -A 增加一個基本的網路認證訊息,使用者名稱和密碼之間用中文冒號隔開。
- -P 增加一個基本的代理認證訊息,使用者名稱和密碼之間用英文分隔開。
- -X 指定使用的代理伺服器和連接埠號,例如:"126.10.10.3:88"。
- -V 列印版本號並退出。
- -k 使用HTTP 的KeepAlive 特性。
- -k 使用HTTP 的KeepAlive 特性。
- -d 不顯示百分比。
- -S 不顯示控制項和警告訊息。
- -g 輸出結果資訊到gnuplot格式的檔案中。
- -e 輸出結果資訊到CSV格式的檔案。
- -r 指定接收到錯誤訊息時不退出程式。
- -h 顯示故障訊息,其實就是ab -help。
複製程式碼
一般用-n,-c,-t就好了 -n請求總數 -c並發數 -t指定秒數內的並發數
-t的用法說一下,下面的意思是在20秒內並發數10個訪問
- D:phpStudyApachebin> ab -c 10 -t 20 http ://example.com/phpinfo.php
- This is ApacheBench, Version 2.3
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
-
- Benchmarking example.com (be patient)
- Finished 3011 requests
-
- Server: nginx/1.6.2
- Server Hostname: example.com
- Server Port: 80
-
- Document Path: /phpinfo.php
- Document Length: 94804 bytes : 10
- ? -2xx responses: 54
- Total transferred: 280896464 bytes
- HTML transferred: 280344222 bytes
- Requests per second: 150.50quest/sec] (>Requests per second: 150.50quest/sec] (305] (mean> )
- Time per request: 6.644 [ms] (mean, across all concurrent requests)
- Transfer rate: 13711.44 [Kbytes/sec] received
-
- Connection (ms) /-sd] median max
- Connect: 0 0 0.5 0 10
- Processing: 6 66 17.6 63 203
- Waiting: 5 64 17.3 61 203
- Waiting: 5 64 17.3 61 203
- Waiting: 5 64 17.3 61 202Percentage of the requests served within a certain time (ms)
- 50% 63
- 66% 69
- 75% 72
- 80% 75
- 75% 72
- 80% 75
- 90% 🎜
- 98% 113
- 99% 125
- 100% 203 (longest request)
-
-
- 複製代碼
-
-
- 特別說明:如果訪問http /www.example.com/,沒有指定特定文件,記得要加最後的那個/,一定要加! ! !否則可能會出現訪問不到的情況! ! !
-
可能會影響基準測試的情況
- 地理位置與網路問題
-
回應檔案大小
程式碼的複雜度
瀏覽器解析
Web伺服器的設定
地理位置和網路問題
如果Web伺服器存放在境外,那麼我們從本地訪問境外的網站,可想而知,經過的路由器結點,伺服器結點,再通過太平洋海底的光纜,而後再訪問到Web伺服器,Web伺服器處理後,再繼續海底光纜,各個伺服器、路由結點的跳轉返回,這樣的話肯定會影響到測試結果(我的建議是,直接在伺服器上進行ab測試)
響應檔案大小
假如發送一個3MB的頁面,伺服器網路卡會把3MB的資料拆分成單一很小的資料包,傳輸過程中,只有一個資料包損壞或遺失,則會重新傳送所有的資料包,所以發送的包越小越好,同時,越小的資料傳輸,越快傳輸到用戶的機器上。
程式碼的複雜度
程式碼的複雜度就是對業務邏輯複雜的處理,還有對檔案呼叫、資料庫存取、遠端API介面的呼叫等等都會影響處理時間
瀏覽器解析
每個瀏覽器都有自己對js、css、html的處理方法,想想IE8以下和chrome的差別就知道
Web伺服器設定
一般Web伺服器安裝後,簡單設置,即可實現Web服務(開箱即用),但是這樣的設置沒有發揮Web伺服器的最大效能,需要資深的工程師對伺服器進行相關配置,使其發揮最大性能,這裡簡單實用Keep-Alive說明。 Keep-Alive的作用就是,Web伺服器開啟特定數量的連接,讓這些連接處於開啟狀態,使之能快速處理傳入的請求,這樣就不會為每一個傳入的請求開啟一個連接然後處理請求,減少伺服器的處理請求的進程數,從而增加並發數。 在ab中使用-k進行測試,例如下面這句
#-k,允許伺服器保存5個並發連線處於開啟並允許的狀態,讓其他要求快速處理,減少建立新要求的處理時間 ab -c 5 -t 100 -k http://www.example.com/
複製程式碼
|