一、簡介
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
![](http://static.javashuo.com/static/loading.gif)
有須要技術交流的小夥伴能夠加我微信,期待與你們共同成長,本人微信:centos
掃描二維碼
添加私人微信
運維貓博主
![](http://static.javashuo.com/static/loading.gif)
掃碼加微信
最近有一些星友諮詢我知識星球的事,我也想繼續在星球上發佈更優質的內容供你們學習和探討。運維貓公衆號平臺致力於爲你們提供免費的學習資源,知識星球主要致力於即將入坑或者已經入坑的運維行業的小夥伴。
點擊閱讀原文 查看更多精彩內容!!!
本文分享自微信公衆號 - 運維貓(centos15)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。