在Centos7.3下使用Siege對Django服務進行壓力測試

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_87

Siege是linux下的一個web系統的壓力測試工具,支持多鏈接,支持get和post請求,可以對web系統進行多併發下持續請求的壓力測試。今天我們就使用Siege來對Django進行一次壓力測試,看看單臺Django服務到底能抗住多少的併發數。

首先安裝Siege

wget http://download.joedog.org/siege/siege-3.0.8.tar.gz
tar zxvf siege-3.0.8.tar.gz
cd siege-3.0.8
./configure
make
make install

驗證安裝結果:輸入siege -V 如果輸出了版本號就代表安裝沒問題

Siege命令常用參數

-c 200 指定併發數200
-r 5 指定測試的次數5
-f urls.txt 制定url的文件
-i internet系統,隨機發送url
-b 請求無需等待 delay=0
-t 5 持續測試5分鐘

測試指標說明:

Transactions: 4 hits 完成4次處理
Availability: 100.00 % 成功率
Elapsed time: 1.19 secs 總共用時
Data transferred: 0.03MB 共數據傳輸:0.03MB
Response time: 0.13 secs 相應用時0.13秒,顯示網絡連接的速度
Transaction rate: 3.36 trans/sec平均每秒完成3.36次處理,表示服務器後臺處理的速度
Throughput: 0.03MB/sec 平均每秒傳送數據:0.03MB
Concurrency: 0.45 最高併發數 0.45
Successful transactions: 4成功處理次數
Failed transactions: 0 失敗處理次數
Longest transaction:0.25請求最長響應時間/每次傳輸所花最長時間
Shortest transaction:0.09請求最短響應時間/每次傳輸所花最短時間

主要參考指標是Transaction rate

測試背景:

軟件:python3.7.2 Django2.0.4

硬件 內存:1g cpu:1個1核 這個硬件配置有點慘,沒辦法了,因爲沒錢買好的

業務場景:Django使用mysql進行普通的讀操作,沒有使用任何緩存

壓測命令:255個用戶併發訪問localhost:8000,持續時間爲1分鐘

siege -c255 -t60S -v -b 127.0.0.1:8000

首先使用runserver的起服務方式進行壓測:

python3 manage.py runserver 0.0.0.0:8000

可以看到,這個有點悽慘,每秒後臺只能處理166的請求,失敗次數也有點高,更加說明了,runserver最好就是本地調試開發的時候用用就可以了,在生產環境使用runserver無異於自殺,不過在一些測試服務器上,如果懶得搭建uwsgi或者gunicorn,可以使用nohup配合runserver臨時用一下。

使用uwsgi來起服務,uwsgi作爲一款高性能的服務器,安裝方式請見:https://v3u.cn/a_id_72起8個worker

uwsgi --http :8000 --module mypro.wsgi --processes 8

可以看到使用了uwsgi的提升還是很可觀的,失敗次數也減少了一半左右

最後,我們來試一試Gunicorn

Gunicorn是使用Python實現的WSGI服務器, 直接提供了http服務, 並且在woker上提供了多種選擇, gevent, eventlet這些都支持, 在多worker最大化裏用CPU的同時, 還可以使用協程來提供併發支撐, 對於網絡IO密集的服務比較有利

安裝 gunicorn

pip3 install gunicorn

起4個worker,50個線程

gunicorn --env DJANGO_SETTINGS_MODULE=mypro.settings mypro.wsgi:application -w 4 -b 0.0.0.0:8000 -k gthread --threads 50

可以看到性能上和uwsgi差不太多,但是失敗數比較多。以1g1核的服務器,併發閾值也就在200左右了。

綜上,單以性能論,Django的表現並非很好,但是你不能忽略它的學習成本低,簡單並且容易上手的優勢,魚與熊掌不能兼得,如果要求高性能,可以試試tornado, 如果tornado依然無法滿足,可以嘗試使用golang,畢竟golang是以高併發著稱的編譯語言,而且基於它的web框架也很容易上手,性能很可觀,例如Iris。

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_87

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章