uwsgi配置理解
最近使用uwsgi 部署了flask應用,出現了不少問題,仔細查閱了一下資料以及翻看了官方文檔,就對自己了解到的做個總結~~
一、http/http-socket/socket
uwsgi開頭當然少不了通信的接口。
有3種方式:
socket=127.0.0.1:8888
http=0.0.0.0:8888
http-socket=127.0.0.1:8888
?三個方式看起來十分的相似,閱讀了很多博客和官方文檔,下面是自己的一些理解(可能不完全正確)!
?
?
?
?
圖一是socket方式,現在大部分web服務器(如nginx)支持uwsgi,?這是這三種方式最高效的一種形式,socket通信速度會比http快
圖二是http-socket方式,這個適用于web服務器不支持uwsgi時。
后面2個圖都是http方式,使用http啟動uwsgi,系統會額外啟動一個http進程,從級別上來說,它和nginx是同一級別的,所以客戶端和uwsgi通信,完全可以繞過nginx,不需要額外進行一個轉發(如圖三一樣),但很顯然,這是并不是一個很明智但選擇,這樣會失去了nginx很多優秀的功能。
官方推薦的方式為socket以及http-socket方式,顯然使用http方式會額外產生一個http進程,如果還通過nginx轉發,那么效率上來說是相對比較低的。
二、processes/workers.
? ? ? ?表示開啟多進程,根據你的應有開啟合適的進程數,在一些參考資料上,可能會看到processes?=?2?*?cpucores或者workers = 2?*?cpucores,如果應有比較簡單,這樣設置一般可以。如果想更合理,官方提供了uwsgitop去獲得一個較為合理的值。
三、threads & enable-threads
? ? ? ? python中存在GIL,實際上不存在真正意義上的多線程,但是否需要,這個就根據各自但需求設定了。結合processes:
processes=2
threads=4
表示2個進程,每個進程中有4個線程。
? ? ? ?由于GIL的存在,uwsgi索性默認不支持多線程,不對GIL進行初始化。但如果希望程序中的線程發揮作用,需要加入enable-threads=True;
? ? ? 但如果已經在多線程模式(使用?threads?選項)下,那么uWSGI將會自動啟用線程支持。
四、uid & gid & chmod-socket
? ? ? ?uwsgi不建議使用root權限去啟動uwsgi實例。可以通過root用戶去運行uwsgi文件,當通過uid和gid去修改用戶(移除root權限)。并且,如果你使用的是socket的通信方式,最好加上chmod-socket字段,在linux下,socket的啟動方式,套接字類似文件,你必須保證有權限去讀取它。
chmod-socket=660
uid=1000
gid=1000
五、master
? ? ? ?意味著啟動一個master主進程來管理其他進程,建議啟動這個進程,在管理的時候比較方便;如果kill這個master進程,相當于關閉所有的uwsgi進程。
六、其他
? ? ? ? chdir: 工程目錄(啟動文件所在位置)。?
? ? ? ? module: 應有程序文件(這個字段與wsgi-file相似?)
? ? ? callable:flask應用實例的名稱,是flask獨有的配置項(django不需要)。由于flask存在特殊的機制,可以實例化多個application,需要明確指出,收到請求時,uwsgi應該調用哪個應用實例。
? ? ? ?buffer-size: 設置用于uwsgi包解析的內部緩存區大小,默認是4k。如果你允許接受較大數據的報頭,這個值可以設置到64k,如果出現報頭過大的錯誤,可以通過設置這個值解決。
? ? ? ?daemonize: 日志輸出文件。
? ? ? ?disable-logging: 不記錄正常的請求日志,只記錄錯誤日志。
七、lazy-app
? ? ? ?這個字段有著特殊的作用,目前還在測試與使用,接下來再把發現的問題更新進來。
下面是是我flask項目的完整uwsgi文件:
socket=127.0.0.1:9088
#http-socket=127.0.0.1:8888
#http=127.0.0.1:8888
processes=2
threads=4
enable-threads=true
lazy-apps=true
uid=1000
gid=1000
chmod-socket=660
master=true
chdir=/data/myapp/
module=manage
callable=app
buffer-size=65536
daemonize=/data/log/uwsgi/app.log
轉載于:https://www.cnblogs.com/ExMan/p/10403916.html
總結
- 上一篇: mui框架提供的相关api
- 下一篇: Spring的事务管理1