uwsgi是一個通用server服務器,支持Python, Ruby等多種語言。uwsgi支持自動伸縮,當空閑超過一定時間,會關閉worker,當請求處理不過來需要排隊時,
創建新的worker。
# 啟用process manager,管理worker進程,worker進程都是這個master進程的子進程
master = true
# wsgi文件
wsgi-file = wsgi.py
# 該對象就是一個wsgi接口,如Flask中的app
callable = WSGIHandler
# 在app加載前切換到當前目錄
chdir = /web/www/mysite
# 監控項目的py文件的mtime來觸發重載 (只在開發時使用),py-autoreload表示多長時間檢測一次,單位秒
py-autoreload=1
# 在每個worker而不是master中加載應用。默認為false,表示先加載應用,再fork出worker,這樣做可以讓work盡量共用內存,只有當寫時才copy
# 由於先加載再fork,但有些東西是不支持fork的,比如socket連接,所以lazy-apps=false時,不要在加載應用時自動創建數據庫連接等
lazy-apps=true
# 指定監聽該機器所有IP的5000端口
http-socket = :5000
# 指定unix domain socket文件。只有當你上游服務器如Nginx與uwsgi服務器在一台機器上時才可以使用
socket = /test/myapp.sock
# 啟動2個worker進程
processes = 2
# 每個worker進程中創建兩個線程
threades = 2
# 設置用於uwsgi包解析的內部緩存區大小為64k。默認是4k。
buffer-size = 32768
# 使進程在后台運行,並將日志打到指定的日志文件或者udp服務器
daemonize = /var/log/myapp_uwsgi.log
# 設置最大日志文件大小
log-maxsize = 5000000
# 禁用請求日志記錄
disable-logging = true
# 當服務器退出的時候自動刪除unix socket文件和pid文件。
vacuum = true
# 設置socket的監聽隊列大小(默認:100)
listen = 120
# 指定pid文件
pidfile = /var/run/uwsgi.pid
# 這個參數不會影響app內創建線程,只影響wsgi內部的api,默認值為false。可以認為對用戶無影響,使用默認值即可。參見 https://github.com/unbit/uwsgi/issues/1141
enable-threads = true
# 設置在平滑的重啟(直到接收到的請求處理完才重啟)一個工作子進程中,等待這個工作結束的最長秒數。這個配置會使在平滑地重啟工作子進程中,如果工作進程結束時間超過了8秒就會被強行結束(忽略之前已經接收到的請求而直接結束)
reload-mercy = 8
# 為每個工作進程設置請求數的上限。當一個工作進程處理的請求數達到這個值,那么該工作進程就會被回收重用(重啟)。你可以使用這個選項來默默地對抗內存泄漏
max-requests = 5000
# 通過使用POSIX/UNIX的setrlimit()函數來限制每個uWSGI進程的虛擬內存使用數。這個配置會限制uWSGI的進程占用虛擬內存不超過256M。如果虛擬內存已經達到256M,並繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。
limit-as = 256
# 一個請求花費的時間超過了這個harakiri超時時間,那么這個請求都會被丟棄,並且當前處理這個請求的工作進程會被回收再利用(即重啟)
harakiri = 60
參考 https://blog.csdn.net/Miss_Audrey/article/details/81874038