1. 程式人生 > >Mac/Linux壓力測試神器Siege詳解(附安裝過程)

Mac/Linux壓力測試神器Siege詳解(附安裝過程)

背景描述

在做Web專案或者一個伺服器程式的時候,往往會遇到以下的場景,想要確定自己伺服器吞吐量有多大、在伺服器中需要應用執行緒池但不知道執行緒池的數量應該設定多少、對JVM相關引數進行調優驗證時需要大量的請求來觸發GC等等。總之,在很多場景下,為了保證我們服務更加可靠和高可用,我們需要對系統進行壓力測試。而下來要介紹的就是一款在Mac及Linux平臺下優秀的壓力測試神器 Siege ,僅僅通過在命令列簡單的輸入命令便可以完成壓力測試的模擬和統計工作:

安裝Siege

在Mac上安裝siege

brew install sige

在Linux下安裝siege

wget http://download.joedog
.org/siege/siege-latest.tar.gz tar -xvf siege-latest.tar.gz cd siege-version/ ./configure make make install

預設安裝在/usr/local/bin/,並自動新增到系統環境變數中,在終端輸入siege 如果可以顯示出相應的命令介紹,如下圖所示,則表示我們已經安裝成功。
這裡寫圖片描述

壓測前的準備工作

一、修改系統的檔案描述符限制

當我們需要模擬大併發情況下的壓測,則需要開啟數量可觀的執行緒,以及要佔用大量的檔案描述符,而系統預設對能夠使用的檔案描述符數量做了限制。首先使用 ulimit -a

命令檢視目前系統開啟的檔案描述符數量

這裡寫圖片描述

可以看到目前系統允許使用的檔案描述符的數量為 256,這是遠遠不夠的。如果不修改該引數,要是進行大量併發的模擬場景時則會報TOO MANY FILES OPEN 錯誤。為此我們可以先使用 ulimit -n 10000命令來調大系統可開啟的檔案描述符數量。
這裡寫圖片描述

二、常用壓測命令介紹

下面列舉出了一些siege的常用命令:

-C, --config 在螢幕上列印顯示出當前的配置,配置是包括在他的配置檔案$HOME/.siegerc中,可以編輯裡面的引數,這樣每次siege 都會按照它執行.
-v, --verbose 執行時能看到詳細的執行資訊.
-c, --concurrent=NUM
模擬有n個使用者在同時訪問,n不要設得太大,因為越大,siege消耗本地機器的資源越多.
-r, --reps=NUM 重複執行測試n次,不能與-t同時存在 -t, --time=NUMm 持續執行siege ‘n’秒(如10S),分鐘(10M),小時(10H) -d, --delay=NUM 每個url之間的延遲,在0-n之間. -b, --benchmark 請求無需等待 delay=0. -i, --internet 隨機訪問urls.txt中的url列表項. -f, --file=FILE 指定用特定的urls檔案執行 ,預設為urls.txt,位於siege安裝目錄下的etc/urls.txt -R, --rc=FILE 指定用特定的siege 配置檔案來執行,預設的為$HOME/.siegerc -l, --log[=FILE] 執行結束,將統計資料儲存到日誌檔案中siege .log,一般位於/usr/local/var/siege .log中,也可在.siegerc中自定義

小試牛刀

做好了前面的準備工作,我們便可以使用siege進行壓測的實踐,就拿我們經常訪問的百度來做一個測試,在命令列中執行下面的命令

測試的結果如下:
這裡寫圖片描述

這些測試結果中的專案含義分別為:

Transactions <———> 總共測試次數
Availability <———> 成功次數百分比
Elapsed time <———> 總共耗時多少秒
Data transferred <———> 總共資料傳輸
Response time <———> 等到響應耗時
Transaction rate <———> 平均每秒處理請求數
Throughput <———> 吞吐率
Concurrency <———> 最高併發
Successful transactions <———> 成功的請求數
Failed transactions <———> 失敗的請求數
Longest transaction <———> 每次傳輸所花最長時間
Shortest transaction <———> 每次傳輸所花最短時間

常用測試命令的總結

# 200個併發對百度傳送請求100次
siege -c 200 -r 100 http://www.baidu.com

# 對urls.txt中列出所有的網址進行壓測
siege -c 200 -r 100 -f urls.txt

# 隨機選取urls.txt中列出的網址,按照100*100的併發度進行測試
siege -c 100 -r 100 -f urls.txt -i

# 指定http請求頭 文件型別
siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b

# 傳送post請求,在網址後新增POST說明,並且緊跟引數在其後
siege -c 100 -r 100 http://www.baidu.com/ POST k1=v1&k2=v2

需要注意的是,如果地址和引數中含有中文或非ASCII字元時,首先需要對這些字元進行url編碼,這樣才可正確的進行測試。