ab 介紹
- apache ab(Apache Bench)性能測試工具,這是[apache]免費自帶的性能測試工具,就在apache的bin目錄下,它能模擬多個并發請求,也就是說它主要是用來測試你的apache每秒能處理多少請求的。
Paste_Image.png
- 格式:ab [options] [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>屬性的字符串
- 這么多參數,其實你大可不必擔心,最基本的關心兩個選項 -c -n
實例
- ab -n 3000 -c 3000 http://www.test.com/
- c 100 即:每次并發3000 個
- n 10000 即: 共發送3000 個請求
- ab -t 60 -c 100 http://192.168.0.10/
- 在60秒內發請求,一次100個請求。
帶參數的的請求
-
ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt http://192.168.0.10/hello.html
- p.txt 是和ab.exe在一個目錄 p.txt 中可以寫參數,如 p=wdp&fq=78 要注意編碼問題
-
參數中的三種形式
- application/x-www-form-urlencoded (默認值)
- 就是設置表單傳輸的編碼,典型的post請求
- multipart/form-data.
- 用來指定傳輸數據的特殊類型的,主要就是我們上傳的非文本的內容,比如圖片,mp3,文件等等
- text/plain . 是純文本傳輸的意思
- application/x-www-form-urlencoded (默認值)
結果分析
Paste_Image.png
Paste_Image.png
- 結果參數解釋:
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 192.168.80.157 (be patient)
Completed 400 requests
Completed 800 requests
Completed 1200 requests
Completed 1600 requests
Completed 2000 requests
Completed 2400 requests
Completed 2800 requests
Completed 3200 requests
Completed 3600 requests
Completed 4000 requests
Finished 4000 requests
Server Software: Apache/2.2.15
Server Hostname: 192.168.80.157
Server Port: 80
Document Path: /phpinfo.php
#測試的頁面
Document Length: 50797 bytes
#頁面大小
Concurrency Level: 1000
#測試的并發數
Time taken for tests: 11.846 seconds
#整個測試持續的時間
Complete requests: 4000
#完成的請求數量
Failed requests: 0
#失敗的請求數量
Write errors: 0
Total transferred: 204586997 bytes
#整個過程中的網絡傳輸量
HTML transferred: 203479961 bytes
#整個過程中的HTML內容傳輸量
Requests per second: 337.67 [#/sec] (mean)
#最重要的指標之一,相當于LR中的每秒事務數,后面括號中的mean表示這是一個平均值
Time per request: 2961.449 [ms] (mean)
#最重要的指標之二,相當于LR中的平均事務響應時間,后面括號中的mean表示這是一個平均值
Time per request: 2.961 [ms] (mean, across all concurrent requests)
#每個連接請求實際運行時間的平均值
Transfer rate: 16866.07 [Kbytes/sec] received
#平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 483 1773.5 11 9052
Processing: 2 556 1459.1 255 11763
Waiting: 1 515 1459.8 220 11756
Total: 139 1039 2296.6 275 11843
#網絡上消耗的時間的分解,各項數據的具體算法還不是很清楚
Percentage of the requests served within a certain time (ms)
50% 275
66% 298
75% 328
80% 373
90% 3260
95% 9075
98% 9267
99% 11713
100% 11843 (longest request)
#整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小于275毫秒,66%的用戶響應時間小于298毫秒,最大的響應時間小于11843毫秒。對于并發請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等于第二個Time per request時間乘以并發請求數。
ab使用的一些問題
- ab命令在一般系統上面做測試時候,一般并發不能超過1024個,其實是因為因為系統限制每個進程打開的最大文件數為1024,可以用ulimit -a來查看
- -n 可以指定最大請求數,但是不能超過50000個
- -v n 當n>=2 時,可以顯示發送的http請求頭,和響應的http頭及內容,壓力測試時不要這么做
- 在做壓力測試的時候,一般情況下壓力測試客戶端接收到的數據量一定會遠大于發送出去的數據量
- 針對一般并發不能超過1024個問題解決方案