uwsgitop 127.0.0.1:5000
linux
uwsgitop輸出信息git
WID -> worker id % -> percentage of served requests by the worker PID -> process id of the worker REQ -> number of managed requests RPS -> number of current requests handled per second EXC -> number of raised exceptions SIG -> number of managed uwsgi signals (NOT unix signals !!!) STATUS -> can be idle, busy, pause, cheaped or sig AVG -> average response time for the worker RSS -> RSS memory (need --memory-report) VSZ -> address space (need --memory-report) TX -> transmitted data RunT -> running time
uwsgitop 後面的地址爲下方的statjson
[uwsgi] # 容許主進程存在 master=true # chdir=/root/project virtualenv=/root/project/venv # 「mount」參數表示將」/」地址路由到」run.py」中,」manage-script-name」參數表示啓用以前在Nginx裏配置的」SCRIPT_NAME」參數。再次重啓Nginx和uWSGI,你就能夠經過」http://localhost/app」來訪問應用了 mount=/=run.py # mount和wsgi-file用其中一個就好了,最好用wsgi-file wsgi-file=run.py manage-script-name=true # 監控參數或py文件的修改,當有修改時會觸發重載,生產環境不容許設爲1 (只在開發時使用) py-autoreload=0 # uWSGI試圖在一切可能的狀況下(濫)用 fork() 調用的寫時拷貝語義。默認狀況下,它會在加載你的應用以後進行fork,以儘量的共享它們的內存。若是出於某些緣由,不指望這個行爲,那麼使用 lazy-apps 選項。這將會指示uWSGI在每一個worker的 fork() 以後加載應用 lazy-apps=true # 設置在收到請求時,uWSGI加載的模塊中哪一個變量將被調用,默認是名字爲「app」的變量 callable=app # 指定uwsgi的客戶端將要鏈接的socket的路徑(使用UNIX socket的狀況)或者地址(使用網絡地址的狀況) socket=127.0.0.1:5003 # 使用HTTP協議綁定到指定UNIX/TCP socket上 # http-socket=127.0.0.1:5003 # 設置socket的監聽隊列大小 listen = 65535 # uwsgi進程數 processes=16 # 記錄uwsgi的master進程的pid pidfile = /data/project_logs/project_uwsgi.pid # 設置請求的最大大小 (排除request-body),這通常映射到請求頭的大小。默認狀況下,它是4k buffer-size=32768 # 將日誌打到指定的日誌文件,若是使用「daemonize =」的話會致使supervisor守護進程失敗,由於設置daemonize在將日誌記錄到文件的同時,也會讓uWSGI進程進入後臺守護uWSGI,而supervisor自己就已經起到了守護進程的做用 logto = /data/project_logs/uwsgi.log # 以固定的文件大小(單位KB),切割日誌文件 log-maxsize = 1000000 # 當啓動時切分日誌 log-truncate = true # 不記錄請求信息request的日誌。只記錄錯誤以及uWSGI內部消息到日誌中 disable-logging = true # 將uWSGI狀態做爲一個JSON對象導出到一個socket,使用uwsgi --connect-and-read /data/project_logs/uwsgi_stats.sock能夠獲取這個json對象 stats = /data/project_logs/uwsgi_stats.sock 或者 stats=127.0.0.1:5000 # 啓用gevent循環引擎,使用指定數目的異步核心數和優化參數 gevent=1000 # 啓動時自動調用gevent.monkey.patch_all() gevent-monkey-patch=true # 容許用內嵌的語言啓動線程。這將容許你在app程序中產生一個子線程 enable-threads = true # uwsgi的單個進程worker佔用物理內存達到1024M,會自動重啓這個worker(防止內存泄露致使worker所佔內存愈來愈多) reload-on-rss = 1024 # uwsgi的單個worker佔用虛擬內存達到2048M,會自動重啓這個worker(防止內存泄露致使worker所佔內存愈來愈多) reload-on-as = 2048
[program:project] directory=/root/project environment=LB_ADX_CONFIG=production command=/root/project/venv/bin/uwsgi --ini project_uwsgi.ini stopasgroup=true stopsignal=QUIT autostart = true startsecs = 5 autorestart = true redirect_stderr = true
配置詳解:
stopasgroup=true
這個東西主要用於,supervisord管理的子進程,這個子進程自己還有子進程。那麼咱們若是僅僅幹掉supervisord的子進程的話,子進程的子進程有可能會變成孤兒進程。因此咱們能夠設置這個選項,把整個該子進程的整個進程組都幹掉。 設置爲true的話,通常killasgroup也會被設置爲true。須要注意的是,該選項發送的是stop信號。
若是不加這個的話,可能會有老的uwsgi進程的子進程殺不死的狀況發生,從而佔用端口,致使新的uwsgi進程啓動不起來網絡
stopsignal=QUIT
幹掉進程的信號,默認爲TERM,好比設置爲QUIT,那麼若是QUIT來幹這個進程那麼會被認爲是正常維護,退出碼也被認爲是expected中的。app
之因此要設置environment參數的緣由是,我在項目中要讀取LB_ADX_CONFIG這個環境變量,supervisord在linux中啓動默認繼承了linux的環境變量,在這裏能夠設置supervisord進程特有的其餘環境變量。異步