uwsgi FAQ 和 最佳實(shí)踐

FAQ

為什么要使用

完整的網(wǎng)站應(yīng)用的開(kāi)發(fā)解決方案
進(jìn)程管理、長(zhǎng)時(shí)間運(yùn)行的任務(wù)、RPC、集群、負(fù)載均衡、監(jiān)控、資源限制

并發(fā)性能

需要注意OS socket backlog queue limit( /proc/sys/net/somaxconn /proc/sys/net/ipv4/tcp_max_syn_backlog)

Harakiri

調(diào)整超時(shí)時(shí)間和監(jiān)聽(tīng)隊(duì)列

調(diào)整

增加工作進(jìn)程并不意味著增加性能,應(yīng)該按照應(yīng)用來(lái)設(shè)置
(IO帶寬 CPU IO延時(shí))
關(guān)于線程,不用線程就別啟用
可以禁用多解釋器,如果只運(yùn)行一個(gè)應(yīng)用則可禁用多個(gè)解釋器 single-interpreter = true
在生產(chǎn)環(huán)境中要啟用master

uwsgi 協(xié)議

集群

uwsgi rpc stack可快速調(diào)用遠(yuǎn)程節(jié)點(diǎn)上的函數(shù)
uwsgi legion subsystem可選舉出多節(jié)點(diǎn)中的主節(jié)點(diǎn)

最佳實(shí)踐

如果把uwsgi直接暴露在外,可使用http,如果想在一個(gè)服務(wù)器之后使用uwsgi,可使用http-socket(http會(huì)啟動(dòng)一個(gè)額外的進(jìn)程來(lái)將請(qǐng)求分發(fā)給工作進(jìn)程,通過(guò)router proxy load-balancer作為護(hù)盾,這個(gè)護(hù)盾還可以獨(dú)立啟動(dòng),通過(guò)http-to來(lái)和sock交流)

Native HTTP support — uWSGI 2.0 documentation (uwsgi-docs.readthedocs.io)

如果是部署多個(gè)app 使用emperor

使用uwsgitop 通過(guò)uwsgi stats server來(lái)監(jiān)控app

http請(qǐng)求的body應(yīng)該被讀取,如果未讀取則影響服務(wù)器
可以設(shè)置post-buffering選項(xiàng)來(lái)讓uwsgi來(lái)自動(dòng)讀取數(shù)據(jù)

關(guān)于app使用的內(nèi)存,可以設(shè)置memory-report選項(xiàng)

關(guān)于權(quán)限:如果使用的是unix socket那么需要注意文件的權(quán)限;啟動(dòng)uwsgi時(shí)默認(rèn)按root,但可通過(guò)uid gid來(lái)控制

默認(rèn)沒(méi)有GIL,在應(yīng)用中創(chuàng)建的線程就不會(huì)運(yùn)行 可通過(guò)enable-threads來(lái)啟用
如果設(shè)置了threads選項(xiàng)(使用線程模型)會(huì)自動(dòng)啟用

在請(qǐng)求中啟動(dòng)一個(gè)新的進(jìn)程會(huì)繼承父進(jìn)程的文件標(biāo)識(shí)符,包括連接的socket,設(shè)置close-on-exec來(lái)禁用該行為

默認(rèn)的請(qǐng)求頭部大小為4096byte,如果收到invalid request block size則需要設(shè)置buffer-size為更大的緩沖,最大65535

查看ip_conntrack_max,如果有很多閑置工作進(jìn)程

strict 嚴(yán)格配置文件

在真實(shí)部署時(shí)關(guān)掉python的code auto reloading

wsgi.file_wrapper如果在返回內(nèi)存中文件中會(huì)出錯(cuò),可通過(guò)wsgi-disable-file-wrapper = true來(lái)禁用


vacuum = true 指示uwsgi清除它產(chǎn)生的任意臨時(shí)文件

need-app = true 沒(méi)有app則不啟動(dòng)

disable-logging = true禁用了日志記錄后可以啟用log-4xx = true log-5xx = true來(lái)啟用異常情況下的日志記錄

工作進(jìn)程回收

max-requests = 1000
max-worker-lifetime = 3600
reload-on-rss = 2048
worker-reload-mercy = 60


額外特性

http相關(guān)支持

./uwsgi --http 127.0.0.1:8080 --master --module mywsgiapp --processes 4
./uwsgi --master --http 127.0.0.1:8080 --http-to /tmp/uwsgi.sock

(1)使用了1個(gè)主進(jìn)程負(fù)責(zé)分發(fā)請(qǐng)求,4個(gè)工作進(jìn)程來(lái)處理
(2)使用了uwsgi socket來(lái)分發(fā)

[uwsgi]
http = 0.0.0.0:8080
http = 192.168.173.17:8181
master = true
http-to = /tmp/uwsgi.sock
http-to = 192.168.173.1:3031
http-to = 192.168.173.2:3031

可監(jiān)聽(tīng)多個(gè)地址 可分發(fā)到多個(gè)地址
可查看subscription服務(wù),有更多的配置選擇
可通過(guò)http-var來(lái)向工作進(jìn)程傳遞uwsgi變量
可通過(guò)http-modifier1向工作進(jìn)程傳遞

關(guān)于keep alive,應(yīng)用應(yīng)當(dāng)返回正確的HTTP頭部,設(shè)置有效的content-length或使用http-auto-chunked選項(xiàng);設(shè)置Connection: Keep-Alive或使用add-header = Connection: Keep-Alive選項(xiàng);http11-socket選項(xiàng)

關(guān)于gzip,使用http-auto-gzip選項(xiàng),如果uWSGI-Encoding頭部設(shè)置為了gzip,同時(shí)Content-Length和Content-Encoding沒(méi)有設(shè)置

https相關(guān)支持

uwsgi --master --https 0.0.0.0:8443,foobar.crt,foobar.key
使用一般端口開(kāi)始https服務(wù)

uwsgi --shared-socket 0.0.0.0:443 --uid roberto --gid roberto --https =0,foobar.crt,foobar.key
因443端口需要權(quán)限,這里用shared socket并在綁定后切換用戶

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

相關(guān)閱讀更多精彩內(nèi)容

  • 通過(guò)Python/WSGI應(yīng)用快速入門[http://www.itdecent.cn/p/9a367222cb8...
    robot_test_boy閱讀 145評(píng)論 0 3
  • uWSGI參考資料(1.0版本的配置選項(xiàng)列表) 下面的內(nèi)容包含了大部分uWSGI的配置選項(xiàng),這些配置選項(xiàng)的列舉沒(méi)有...
    nine_9閱讀 22,558評(píng)論 1 10
  • 搭建簡(jiǎn)單的nginx+uwsgi服務(wù) 附錄(uwsgi ini文件內(nèi)容詳解) 客戶端發(fā)送一個(gè)http請(qǐng)求,被ngi...
    雄柱閱讀 1,039評(píng)論 0 1
  • socket uwsgi監(jiān)聽(tīng)的socket,可以為socket文件或ip地址+端口號(hào)socket = /www/w...
    鳳非飛閱讀 10,936評(píng)論 0 3
  • 更多關(guān)注:http://www.mknight.cn/post/602/ python3 編譯安裝 依賴環(huán)境安裝 ...
    Medivh_閱讀 788評(píng)論 0 0

友情鏈接更多精彩內(nèi)容