Python Web服務器并發(fā)性能測試

Python Web服務器并發(fā)性能測試

測試條件

  • 測試機器:四核,4GB內存
  • 系統(tǒng)環(huán)境:Ubuntu 14.04 LTS
  • 測試環(huán)境:django
  • 測試工具:apache ab
  • 測試參數(shù):1000個并發(fā) 1000~10000個請求

測試效果

  • django
    毫無疑問,用原生django的server做處理的表現(xiàn)是最爛的,在10000次請求的情況下brokenpipe的幾率極高,只有1400次請求被處理,成功率只有14%,我也懶得繼續(xù)測下去了。
  • django + nginx
    這次搭上了nginx做反向代理,也使的脆弱的django服務器的情況有所緩解,但成功率仍然不高(10000次請求中有3684個請求被處理)。
  • uwsgi + nginx
    uwsgi是性能極高的一個由C編寫的服務器,它使用uwsgi協(xié)議,這次讓它配合nginx處理django的request,參數(shù)為4進程+2線程,性能立即直線上升,處理請求的成功率也基本在90%左右,不過我在測試時遇到了一個坑,就是uwsgi在處理請求的時候發(fā)送了隊列溢出的問題,因為當前測試設置的并發(fā)數(shù)為每秒1000次并發(fā),而uwsgi的處理隊列容量默認為100,導致處理請求的時間加長,而這個問題則可以通過修改somaxcon的大小解決,總的來說,使用uwsgi+nginx是一個理想的選擇。
  • gunicorn + nginx
    gunicorn跟uwsgi類似,也是一個高性能的http服務器,它由ruby的unicorn項目移植,是由python編寫的,它的配置簡單,而且可以靈活地搭配其他網絡庫,部署十分方便,在測試數(shù)據中可以看到,用這種配置運行django能在短時間內就能處理大量的并發(fā)請求,成功率在90%左右。
  • gunicorn + nginx + gevent
    前面說的幾種環(huán)境,看似不錯,但我們需要追求完美!由于gunicorn是同步(sync)單線程模型的,有的時候它不免會發(fā)生一些阻塞問題,這時候我們?yōu)間unicorn加上-k gevent參數(shù)來用gevent做處理接口,這就比較靠譜地處理了阻塞問題,從數(shù)據中可以看到,gunicorn + nginx + gevent的模式不僅擁有100%的處理成功率,而且時間也在很短之內完成,是5組測試數(shù)據當中的性能最好的。

每秒發(fā)送1000次并發(fā)需要時間

1.png

每秒發(fā)送1000次并發(fā)有效請求

2.png

所有測試數(shù)據

3.png

參考文章

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 學過PHP的都了解,php的正式環(huán)境部署非常簡單,改幾個文件就OK,用FastCgi方式也是分分鐘的事情。相比起...
    chen_000閱讀 2,250評論 0 1
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,847評論 6 427
  • 學習 Flask,寫完一個 Flask 應用需要部署的時候,就想著折騰自己的服務器。根據搜索的教程照做,對于原理一...
    Cocoa_Coder閱讀 17,377評論 4 56
  • 一. 部署python項目的方式 python web項目的部署方式,根據網上資料有9種,請參考資料,本文不做詳細...
    午覺不眠Orz閱讀 13,857評論 0 6
  • 今天親愛的來家里拜年,見親友和老人,我有點緊張焦慮,一切都是第一次,很多話不知道該怎么說,不知道爸媽的期待和對方的...
    宛若星宸閱讀 226評論 0 0

友情鏈接更多精彩內容