apache-ab併發負載壓力測試

NO IMAGE

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

-attributes 設定

屬性的字串。 此屬性被填入

測試的頁面

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個問題解決方案

作者:望月成三人
連結:https://www.jianshu.com/p/166a4ea8aade
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。