ab壓力測試是使用以及介紹
在運維工作中,壓力測試是一項非常重要的工作。比如在一個網站上線之前,能承受多大訪問量、在大訪問量情況下效能怎樣,這些資料指標好壞將會直接影響使用者體驗。
但是,在壓力測試中存在一個共性,那就是壓力測試的結果與實際負載結果不會完全相同,就算壓力測試工作做的再好,也不能保證100%和線上效能指標相同。面對這些問題,我們只能儘量去想方設法去模擬。所以,壓力測試非常有必要,有了這些資料,我們就能對自己做維護的平臺做到心中有數。
目前較為常見的網站壓力測試工具有webbench、ab(apache bench)、tcpcopy、loadrunner。
webbench由Lionbridge公司開發,主要測試每秒鐘請求數和每秒鐘資料傳輸量,同時支援靜態、動態、SSL,部署簡單,靜動態均可測試。適用於小型網站壓力測試(單例最多可模擬3萬併發) 。
ab(apache bench)Apache自帶的壓力測試工具,主要功能用於測試網站每秒鐘處理請求個數,多見用於靜態壓力測試,功能較弱,非專業壓力測試工具。
tcpcopy基於底層應用請求複製,可轉發各種線上請求到測試伺服器,具有分散式壓力測試功能,所測試資料與實際生產資料較為接近後起之秀,主要用於中大型壓力測試,所有基於tcp的packets均可測試。
loadrunner壓力測試界的泰斗,可以建立虛擬使用者,可以模擬使用者真實訪問流程從而錄製成指令碼,其測試結果也最為逼真模擬最為逼真,並可進行獨立的單元測試,但是部署配置較為複雜,需要專業人員才可以。
下面,筆者就以ab為例,來講解一下網站在上線之前壓力測試是如何做的。
ab是針對apache的效能測試工具,可以只安裝ab工具。
ubuntu安裝ab
1 |
|
centos安裝ab
1 |
|
測試之前需要準備一個簡單的html、一個php、一個圖片檔案。
分別對他們進行測試。
我們把這個三個檔案放到nginx安裝目錄預設的html目錄下,
準備之後我們就可以測試了
1 |
|
這個指令會使用1000個併發,進行連線1000次。結果如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
對於php檔案和圖片檔案可以使用同樣指令進行,結果我就不貼出來了。
1 2 3 |
|
輸出結果我們可以從字面意思就可以理解。
這裡對兩個比較重要的指標做下說明
比如
1 2 3 4 |
|
表示當前測試的伺服器每秒可以處理16.54個靜態html的請求事務,後面的mean表示平均。這個數值表示當前機器的整體效能,值越大越好。
1 |
|
單個併發的延遲時間,後面的mean表示平均。
隔離開當前併發,單獨完成一個請求需要的平均時間。
順帶說一下兩個Time per request區別
1 2 |
|
前一個衡量單個請求的延遲,cpu是分時間片輪流執行請求的,多併發的情況下,一個併發上的請求時需要等待這麼長時間才能得到下一個時間片。
計算方法Time per request: 60.444 [ms] (mean, across all concurrent requests)*併發數
通俗點說就是當以-c 10的併發下完成-n 1000個請求的同時,額外加入一個請求,完成這個求平均需要的時間。
後一個衡量效能的標準,它反映了完成一個請求需要的平均時間,在當前的併發情況下,增加一個請求需要的時間。
計算方法Time taken for tests: 60.444 seconds/Complete requests: 1000
通俗點說就是當以-c 10的併發下完成-n 1001個請求時,比完成-n1000個請求多花的時間。
你可以適當調節-c 和-n大小來測試伺服器效能,藉助htop指令來直觀的檢視機器的負載情況。
我的機器是盛大雲的超微主機,平時負載cpu是1.7%,htop命令結果截圖
加壓後的負載100%,負載基本已經上來了。htop命令結果截圖
看來我需要好好優化一下,或者就換臺機器了。
ab的引數詳細解釋
普通的測試,使用-c -n引數配合就可以完成任務
格式: ./ab [options] [http://]hostname[:port]/path
引數:
-n 測試的總請求數。預設時,僅執行一個請求
-c 一次併發請求個數。預設是一次一個。
-H 新增請求頭,例如 ‘Accept-Encoding: gzip',以gzip方式請求。
-t 測試所進行的最大秒數。其內部隱含值是-n 50000。它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。
-p 包含了需要POST的資料的檔案.
-T POST資料所使用的Content-type頭資訊。
-v 設定顯示資訊的詳細程度 – 4或更大值會顯示頭資訊, 3或更大值可以顯示響應程式碼(404, 200等), 2或更大值可以顯示警告和其他資訊。 -V 顯示版本號並退出。
-w 以HTML表的格式輸出結果。預設時,它是白色背景的兩列寬度的一張表。
-i 執行HEAD請求,而不是GET。
-C -C cookie-name=value 對請求附加一個Cookie:行。 其典型形式是name=value的一個引數對。此引數可以重複。