如何使用siege測試伺服器效能

天府雲創發表於2019-04-15

siege是一款開源的壓力測試工具,可以根據配置對一個WEB站點進行多使用者的併發訪問,記錄每個使用者所有請求過程的相應時間,並在一定數量的併發訪問下重複進行。

1 安裝

# make sure you have the ssl libs installed(http://digitalleafblower.com/?p=166)
yum install mod_ssl openssl 
git clone https://github.com/JoeDog/siege.git
cat INSTALL  # 步驟
./utils/bootstrap 
./configure --with-ssl=/usr/bin/openssl
make
make install
export PATH=$PATH:/usr/local/bin

驗證:siege -V

2 get請求測試:

siege -c 100 -r 10 -f someScript.url

-c是併發量,-r是重複次數。併發量乘重複次數就是總的請求次數。

url檔案就是一個文字,每行都是一個url,它會從裡面隨機訪問的。

類似ab的純併發壓力測試:

siege -c 100 -r 10 http://www.google.com

(http://www.blogjava.net/iamtin/archive/2007/10/24/how_to_use_siege.html)

測試tornado程式效能:

$ siege -c 1000 -t 10s 'http://mysite.cn:8090'

xxx

Lifting the server siege...
Transactions:           4191 hits
Availability:         100.00 %
Elapsed time:           9.12 secs
Data transferred:       871.92 MB
Response time:            0.50 secs
Transaction rate:       459.54 trans/sec
Throughput:          95.60 MB/sec
Concurrency:          231.10
Successful transactions:        4203
Failed transactions:             0
Longest transaction:          6.56
Shortest transaction:         0.04

3 post請求測試

siege -c 500 -r 1 '10.23.54.151:19595/v1/db/nova/service_get_all POST <./postfile.json

content_type被正確設定為application/json,伺服器正常處理返回。原來siege只能通過檔案的副檔名來確定content type格式
(http://blog.csdn.net/xuriwuyun/article/details/12711927)

# 預設Content-type: application/x-www-form-urlencoded
# -g GET, pull down HTTP headers and display the transaction.
siege -c 1000 -t 10s 'http://mysite.cn:8090/login-is POST node=xxx&password=xxx' -g
# map the file extension to the appropriate content-type
# Content-type: application/json
siege -c 10 "http://mysite:8001/query_code POST <./querycode.json"  -t 10s

4 其他web壓力測試工具

siege簡單易用,其缺點在於統計結果過於粗糙。

如果想知道請求的平均時間、連線、處理、等待時間等資訊,可以用apache自帶的AB工具(Apache Benchmark)

# 163yum源
cd /etc/yum.repos.d

#備份系統自帶的yum源

mv CentOS-Base.repo CentOS-Base.repo.bk

#下載163網易的yum源:

#centos7.x:

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

#centos6.x:

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

#更新完yum源後,執行下邊命令更新yum配置,使操作立即生效

yum makecache

ref(https://yq.aliyun.com/ziliao/115638

安裝好Apache,就自帶AB了
yum install httpd

引數很多,一般我們用 -c 和 -n 引數就可以了. 例如:

./ab -c 1000 -n 1000 http://127.0.0.1/index.php

輸出的關鍵引數包括但不限於:

Requests per second: 122.12 [#/sec] (mean)
//大家最關心的指標之一,相當於 LR 中的 每秒事務數 ,後面括號中的 mean 表示這是一個平均值
Time per request: 8188.731 [ms] (mean)
//大家最關心的指標之二,相當於 LR 中的 平均事務響應時間 ,後面括號中的 mean 表示這是一個平均值
Time per request: 8.189 [ms] (mean, across all concurrent requests)
//每個請求實際執行時間的平均值
Transfer rate: 162.30 [Kbytes/sec] received
//平均每秒網路上的流量,可以幫助排除是否存在網路流量過大導致響應時間延長的問題

Connection Times (ms)
min mean[+/-sd] median max // 最小值、平均數、中位數、最大值
Connect: 4 646 1078.7 89 3291
Processing: 165 992 493.1 938 4712
Waiting: 118 934 480.6 882 4554
Total: 813 1638 1338.9 1093 7785

【使用siege測試案例】

主流PHP框架效能非權威測試

作為一個PHP開發者,而且是初創企業團隊的技術開發者,選擇開發框架是個很艱難的事情。

用ThinkPHP的話,招聘一個剛從培訓機構出來的開發者就可以上手了,但是效能和後期程式碼解耦是個讓人頭疼的事情。不過很多第三方功能不需要自己寫,眾多大牛已經給鋪好路了。

用Laravel的話,傳說寫起來很爽擴充套件性也夠,但是學習成本有點高,總不能給初級開發者半個月的時間去學習框架吧。而且據說江湖人士透漏,Laravel效能不怎麼樣,文件也並不是特別豐富。

用Yii的話,語法有點囉嗦,前後端程式碼分離有點小麻煩,不過效能是非常好的,而且已經有眾多國內大公司在使用了,出現意外可以快速的找到大牛答疑解惑。

不如做個簡單的效能評測,選個效能出色的總不會出錯

效能測試

測試時間: 2016年05月06日
測試工具: siege (因為MAC系統的ab總是會出現 pr_socket_recv: Connection reset by peer (54) 的錯誤,所以選擇了siege)
測試機器: MacPro Core i5 處理器/8GB記憶體/256GB SSD快閃記憶體
測試環境: Apache PHP5.6
框架版本: ThinkPHP 3.2.3 Laravel 5.2 Yii2.0.5
測試原則: 每次測試迴圈5次,取中等資料
補充說明:所有專案都是讓在子目錄中

結果說明

Transactions: 2119 hits 處理請求總數量
Availability: 96.85 % 可用性
Elapsed time: 9.74 secs 執行時間
Data transferred: 1.31 MB 資料傳輸量
Response time: 0.60 secs 響應時間
Transaction rate: 217.56 trans/sec 每秒處理效率
Throughput: 0.13 MB/sec 每秒處理資料
Concurrency: 130.28 併發
Successful transactions: 2162 成功的請求
Failed transactions: 69 失敗的請求
Longest transaction: 2.85 最長的單個請求
Shortest transaction: 0.01 最短的單個請求
開始測試

相關文章