Linux壓力測試工具—Siege命令

一、簡介

Siege是一款開源的壓力測試工具,設計用於評估WEB應用在壓力下的承受能力。能夠根據配置對一個WEB站點進行多用戶的併發訪問,記錄每一個用戶全部請求過程的相應時間,並在必定數量的併發訪問下重複進行。siege能夠從您選擇的預置列表中請求隨機的URL。因此siege可用於仿真用戶請求負載,而ab則不能。但不要使用siege來執行最高性能基準調校測試,這方面ab就準確不少。ios

Siege官網:http://www.joedog.org/Siege下載:http://www.joedog.org/pub/siege/siege-latest.tar.gzgit

二、安裝

 # 下載
 [root@redis-120-20 opt]# git clone https://github.com/JoeDog/siege.git
 # yum安裝
 [root@redis-120-20 opt]# yum install siege

三、Siege命令經常使用格式

 [root@redis-120-20 ~]# man siege
 -C,或–config : 在屏幕上打印顯示出當前的配置,配置是包括在他的配置文件$HOME/.siegerc中,能夠編輯裏面的參數,這樣每次siege 都會按照它運行.
 -v: 運行時能看到詳細的運行信息
 -cn,或–concurrent=n : 指定併發的用戶個數,-c 200指定併發數200。模擬有n個用戶在同時訪問,n不要設得太大,由於越大,siege 消耗本地機器的資源越多
 -i,–internet : 隨機訪問urls.txt中的url列表項,以此模擬真實的訪問狀況(隨機性),當urls.txt存在是有效。默認爲urls.txt列表從上到下來壓。
 -dn,–delay=n : hit每一個url之間的延遲,在0-n之間
 -rn,–reps=n : 重複運行測試n次,不能與-t同時存在
 -tn,–time=n : 持續時間。即測試持續時間。默認是分鐘。例: -t10S,(10秒) -t5M,(5分鐘) -t1H,(1小時)
 -l: 運行結束,將統計數據保存到日誌文件中siege .log,通常位於/usr/local/var/siege .log中,也可在.siegerc中自定義
 -RSIEGERC,–rc=SIEGERC : 指定用特定的siege 配置文件來運行,默認的爲$HOME/.siegerc
 -fFILE, –file=FILE : 指定用特定的urls文件運行siege ,默認爲urls.txt,位於siege 安裝目錄下的etc/urls.txt
 -uURL,–url=URL : 測試指定的一個URL,對它進行」siege 「,此選項會忽略有關urls文件的設定
 -b: 進行壓力測試,不進行延時。
 -A--user-agent=「text」 : 設置請求的User-Agent

siegerc設定檔說明github

 verbose : 要不要顯示過程。
 display-id : 顯示過程的時候,要不要顯示模擬user的id
 show-logfile : 跑完以後要不要顯示log資訊
 logging : 要不要log到檔案
 logfile : 要log到檔案的話,檔名是什麼
 protocol : HTTP通信協定( HTTP/1.1或HTTP/1.0 二者擇一)
 connection : keep-alive表示模擬成persistent connection(寫close則反之)
 concurrent : 模擬有幾個user來衝
 time : 跑多久以後中止( H=hours, M=minutes, S=seconds)
 reps : 每個concurrent衝幾回。
 file : 多個目的url情形下的url檔案位置。
 url : 單一url情形下的指定url
 delay : 非benchmakr況下,每一個模擬user隨機延遲0到這個數字(單位:秒)。
 timeout : socket connection timeout(單位:秒)。
 failures : socket失敗次數(timeouts, connection failures)到達這個數字就停下來。
 internet : 隨機從urls.txt抓出url,不然從urls.txt循序。
 benchmark : 跑benchmark模式的話,siege將不會在每一個connection間delay,適合拿來作load testing.
 user-agent : 送出的agent識別
 login : WWW-Authenticate login( login =jdfulmer:topsecret:Admin )(非form based)
 username,password : 也是login用的(非form based)
 Login URL : 每個模擬user都必須通過的第一個login url( form based)
 proxy-host,proxy-port,proxy-login : 使用proxy的話要填這個。(proxy-login: jeff:secret:corporate)
 follow-location : redirection support
 zero-data-ok : 接不接受zero-length data
 chunked : HTTP/1.1須要chunked encoding

四、URL文件格式說明

GETweb

 server=10.100.3.70
 http://${server}/pic01/006u6AVDgy1gc9veol6dlj30yi07gdh0.jpg
 http://${server}/pic01/0072KB5Gly1gcbveoguy6j30r80pownf.jpg
 http://${server}/pic01/0072KB5Gly1gcbveoubj9j30r80q112w.jpg

POSTredis

 server=10.100.3.70:8080
 http://${server}/uri POST k1=v1&k2=v2

五、用法舉例

1.模擬50個用戶併發訪問百度首頁10秒

 [root@redis-120-20 ~]# siege -d 10 -c 50 -t 10 https://www.baidu.com/
 
 {"transactions":      75314,
 "availability":     100.00,
 "elapsed_time":     599.83,
 "data_transferred":     921.54,
 "response_time":       0.02,
 "transaction_rate":     125.56,
 "throughput":       1.54,
 "concurrency":       2.27,
 "successful_transactions":      75315,
 "failed_transactions":          0,
 "longest_transaction":       1.66,
 "shortest_transaction":       0.00
 }

2.對URL文件中的地址進行隨機100併發的壓力測試持續120秒

 [root@redis-120-20 ~]# cat url.txt 
 http://192.168.80.166/01.jpg
 http://192.168.80.166/02.jpg
 http://192.168.80.166/03.jpg
 http://192.168.80.166/04.jpg
 http://192.168.80.166/05.jpg
 http://192.168.80.166/06.jpg
 [root@redis-120-20 ~]# siege -c 100 -b -i -t 120s -f url.txt

3.對post的data進行壓測post.url爲一行一個data urlencode編碼

 [root@redis-120-20 ~]# cat post.url
 x=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsK%0ACwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT%2F2wBDAQMEBA
 UEBQkFBQkUDQsN
 x=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEP%0AERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7%2F2wBDAQUFBQ
 cGBw4ICA4eFBEU
 # 對post的data進行壓測post.url爲一行一個data urlencode編碼
 [root@redis-120-20 ~]# siege -c 100 -b -i -t 120 -H 'Content-Type: application/x-www-form-urlencoded' 'http://10.100.3.50:80 POST < post.url'

4.加一個headers頭的 Content-Type:application/json 而後POST發送uncollect.json中的數據

 [root@redis-120-20 ~]# vim uncollect.json
 {
    "token":"c23f5fac69190de92a50973803409811",
    "type":0,
    "uni_id":"1acbb47a1d4f7b1f29cca86de70c84b4"
 }
 [root@redis-120-20 ~]# siege -c 10 -r 30 --H "Content-Type:application/json" "http://47.104.18.17:9005/api/v1.0/user/collect?appName=leqv&version=99&build=1.0.0&os=ios&channel=appstore POST < ./uncollect.json"
 ----------------------------------------------------------------------------------------
 Transactions:   siege對服務器的訪問次數。若是頁面發生了redirect,那麼siege會將跳轉過的請求算成是另外一個transaction
 Availability:   socket鏈接的成功率。算法是,若是頁面發生了timeout,4xx,5xx,那麼該請求算是失敗請求,成功率就等於(全部請求-失敗請求) / 總請求數
 Elapsed time:   全部請求耗費的時間
 Data transferred: 全部請求傳輸的數據量,包括請求的headers和content。因此這個數值可能比server端統計的數值要大一點
 Response time: 平均響應時間
 Transaction rate: Transactions / Elapsed time
 Throughput: 每秒平均傳輸的數據量
 Concurrency: 平均併發的請求數
 Successful transactions: 全部status code < 400的transactions數量
 Failed transactions: 全部status code >=400的transactions數量
 Longest transaction: 最耗時的請求時間
 Shortest transaction: 最短單個請求時間

六、測試結果解釋

 Transactions:             30000hits      #完成30000次處理
 Availability:            100.00 %         #成功率
 Elapsed time:             68.59 secs      #總共使用時間
 Data transferred:        817.76 MB        #共數據傳輸 817.76 MB
 Response time:             0.04 secs      #響應時間,顯示網絡鏈接的速度
 Transaction rate:        437.38 trans/sec #平均每秒完成 437.38 次處理
 Throughput:               11.92 MB/sec    #平均每秒傳送數據
 Concurrency:              17.53           #實際最高併發鏈接數
 Successful transactions:  30000          #成功處理次數
 Failed transactions:          0          #失敗處理次數
 Longest transaction:       3.12           #每次傳輸所花最長時間
 Shortest transaction:      0.00           #每次傳輸所花最短期

七、測試報告樣例

 測試參數測試結果
 模擬客戶端數持續時間 請求次數成功率平均響應時間  平均速率      實際併發
 100        120s  10875100.00% 1.09 secs 91.36 trans/sec 99.22
 200        120s     10963100.00% 2.14 secs 92.06 trans/sec 196.67
 300        120s  10827100.00% 2.68 secs 90.56 trans/sec 242.58
 400        120s  10904100.00% 2.71 secs 91.53 trans/sec 248.19
 500        120s  10848100.00% 2.67 secs 90.82 trans/sec 242.25

若是文章有任何錯誤歡迎不吝賜教,其次你們有任何關於運維的疑難雜問,也歡迎和你們一塊兒交流討論。關於運維學習、分享、交流,筆者開通了微信公衆號【運維貓】,感興趣的朋友能夠關注下,歡迎加入,創建屬於咱們本身的小圈子,一塊兒學運維知識。羣主還經營一家Orchis飾品店,喜歡的小夥伴歡迎👏前來下單。
算法



掃描二維碼shell

獲取更多精彩json

運維貓公衆號vim


有須要技術交流的小夥伴能夠加我微信,期待與你們共同成長,本人微信:centos


掃描二維碼

添加私人微信

運維貓博主


掃碼加微信

最近有一些星友諮詢我知識星球的事,我也想繼續在星球上發佈更優質的內容供你們學習和探討。運維貓公衆號平臺致力於爲你們提供免費的學習資源,知識星球主要致力於即將入坑或者已經入坑的運維行業的小夥伴。


點擊閱讀原文  查看更多精彩內容!!!

本文分享自微信公衆號 - 運維貓(centos15)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索