uwsgi 常用參數


uwsgi 常用參數

項目目錄

chdir=/var/www/orange_web/

指定項目application

module=orange_web.wsgi:application

指定sock的文件路徑(nginx使用)

socket=/var/www/script/uwsgi.sock

進程個數(processess一樣效果)

workers=2

指定啟動時的pid文件路徑

pidfile=/var/www/script/uwsgi.pid

指定ip及端口(配置nginx就不需要單獨啟動uwsgi需要填寫)

http=172.16.0.4:8001

指定靜態文件(配置nginx不需要,單獨啟動uwsgi加載靜態文件)

static-map=/static=/var/www/orange_web/static

啟動uwsgi的用戶名和用戶組

uid=root
gid=root

啟用主進程

master=true

啟用線程

enable-threads=true

自動移除unix Socket和pid文件當服務停止的時候

vacuum=true

設置日志目錄

daemonize=/var/www/script/uwsgi.log

不記錄信息日志,只記錄錯誤以及uwsgi內部消息

disable-logging=true

序列化接受的內容,如果可能的話

thunder-lock=true

啟動主進程,來管理其他進程,其它的uwsgi進程都是這個master進程的子進程,如果kill這個master進程,相當於重啟所有的uwsgi進程。

master = true

在app加載前切換到當前目錄, 指定運行目錄

chdir = /web/www/mysite

加載一個WSGI模塊,這里加載mysite/wsgi.py這個模塊

module = mysite.wsgi

監控python模塊mtime來觸發重載 (只在開發時使用)

py-autoreload=1

在每個worker而不是master中加載應用

lazy-apps=true

指定socket文件,也可以指定為127.0.0.1:9000,這樣就會監聽到網絡套接字

socket = /test/myapp.sock

啟動2個工作進程,生成指定數目的worker/進程

processes = 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程序中產生一個子線程

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

 

 

[uwsgi]

#指定IP端口 // 直接外部訪問
#http-socket = 127.0.0.1:8080

#項目目錄
chdir = /www/wwwroot/web/

#指定項目的application
module = web.wsgi:application

#uwsgi啟動用戶名和用戶組
uid = www
gid = www

#啟用主進程
master = true

#指定Socket路徑 //內部訪問 #權限和nginx一樣
socket = /www/wwwroot/web/script/uwsgi.sock
#socket = :8080

#socket權限設置
chmod-socket = 755

#進程個數
processes = 5
pidfile = /www/wwwroot/web/script/uwsgi.pid

#自動移除unix Socket 和 Pid 文件 當服務停止的時候
vacuum = true

#序列化接受的內容,如果可能的話
thunder-lock = true

#啟用線程
enable-threads = true

#設置自動中斷時間
harakiri = 30

#設置緩沖
post-buffering = 4096

#設置靜態文件
#static-map = /static=//www/wwwroot/mysite/static

#設置日志目錄
#daemonize = /www/wwwroot/mysite/uwsgi.log

 

 

 

 

 

 

 

 

 

 

 

 

uwsgi的安裝也是可以直接采用yum安裝,配置也是比較簡單,
不過要想成功啟動Python程序,需要用yum安裝一個插件
uwsgi-plugin-python
如果想安裝所有插件,可以直接安裝uwsgi-plugin-all軟件包
說明:
虛擬環境的python路徑可以直接設置為本地python環境路徑,其他路徑根據自己需要修改

UWSGI 配置說明

1. 備份原配置文件 mv /etc/uwsgi.ini /etc/uwsgi.ini.bak

2. 修改uwsgi.conf.example文件
2.1 uwsgi 配置文件選擇修改部分
processes = 4 #進程數量
threads = 5 #線程數量

2.2 uwsgi 配置文件必須修改部分
pythonpath = /opt/qogir/libs/bin/ #python 路徑
virtualenv = /opt/qogir/libs/ #虛擬環境路徑

socket = 192.168.2.22:9090 #uwsgi程序運行的Ip和端口

chdir = /var/www/cloudmonitor/qogir_api/ #指定代碼運行目錄(根據代碼存放路徑修改)

wsgi-file = /var/www/cloudmonitor/qogir_api/App.py #載入wsgi-file

master = true #允許主進程存在

callable = app #變量app 與 App.py文件中的app = Flask(__name__)對應

3. 移動配置文件到 /etc/ 下
cp uwsgi.ini.example /etc/uwsgi.ini

4. 運行 uwsgi 查看運行狀態
啟動uwsgi systemctl start uwsgi
查看uwsgi運行狀態 systemctl status uwsgi

看到進程PID 以及 WSGI app ready 即為啟動成功
Process: 5371 ExecStartPre=/bin/chown uwsgi:uwsgi /run/uwsgi (code=exited, status=0/SUCCESS)
Process: 5370 ExecStartPre=/bin/mkdir -p /run/uwsgi (code=exited, status=0/SUCCESS)
Main PID: 5372 (uwsgi)
Status: "uWSGI is ready"
CGroup: /system.slice/docker-8b7ab6359ca7a84144e2fef73b926c75b8bd3010162e533b93908215d499ea19.scope/system.slice/uwsgi.service
├─5372 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
├─5373 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
├─5378 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
├─5383 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
├─5384 /usr/sbin/uwsgi --ini /etc/uwsgi.ini
└─5385 /usr/sbin/uwsgi --ini /etc/uwsgi.ini

from flask.ext.restful import reqparse
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x128e120 pid: 5372 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 5372)
spawned uWSGI worker 1 (pid: 5378, cores: 5)
spawned uWSGI worker 2 (pid: 5383, cores: 5)
spawned uWSGI worker 3 (pid: 5384, cores: 5)
spawned uWSGI worker 4 (pid: 5385, cores: 5)
*** Stats server enabled on /run/uwsgi/stats.sock fd: 43 ***
Started uWSGI Emperor Service.

5.查看 uwsgi 運行日志
uwsgi 配置日志命令 daemonize = /var/log/uwsgi/uwsgi.log
daemonize 日志命令與 systemctl 啟動模式有沖突,配置日志后啟動會報錯,所以只能查看systemctl日志
systemctl 日志查看命令 journalctl

附:uwsgi.conf.example

[uwsgi]
uid = uwsgi
gid = uwsgi
plugins = python
pythonpath = /opt/qogir/libs/bin/
virtualenv = /opt/qogir/libs/
chmod-socket = 660

socket = 192.168.2.22:9090

processes = 4
threads = 5

chdir = /var/www/cloudmonitor/qogir/qogir_api/
wsgi-file = /var/www/cloudmonitor/qogir/qogir_api/App.py

master = true

callable = app


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM