2015-06-26 4 views
1

Все, я разрабатываю API-интерфейс на основе колб, используя uWSGI v2) в качестве сервера приложений (при необходимости, NGINX). .ini файл uWSGI является:Flask/uWSGI - слишком много процессов через некоторое время

[uwsgi] 
module = WSGI 
callable = app 
master = true 
processes = 5 
socket = /var/uwsgi/api.sock 
uid = gg_python 
gid = www-data 
vacuum = true 
venv = /home/gg_python/flask_projects/api/apivenv3 
die-on-term = true 
daemonize = /tmp/uwsgi_daemonize.log 

Update: вот uWSGI резюме стартап выход:

*** Starting uWSGI 2.0.10 (64bit) on [Fri Jun 26 08:31:52 2015] *** 
compiled with version: 4.9.2 on 29 April 2015 17:23:06 
os: Linux-3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) 
nodename: debian-api 
machine: x86_64 
clock source: unix 
pcre jit disabled 
detected number of CPU cores: 2 
current working directory: /home/gg_python/flask_projects 
detected binary path: /home/gg_python/flask_projects/api/apivenv3/bin/uwsgi 
your processes number limit is 7972 
your memory page size is 4096 bytes 
detected max file descriptor number: 65536 
lock engine: pthread robust mutexes 
thunder lock: disabled (you can enable it with --thunder-lock) 
uwsgi socket 0 bound to UNIX address /var/uwsgi/api.sock fd 3 
Python version: 3.4.2 (default, Oct 8 2014, 10:47:48) [GCC 4.9.1] 
PEP 405 virtualenv detected: /home/gg_python/flask_projects/api/apivenv3 
Set PythonHome to /home/gg_python/flask_projects/api/apivenv3 
*** Python threads support is disabled. You can enable it with --enable-threads *** 
Python main interpreter initialized at 0x19faca0 
your server socket listen backlog is limited to 100 connections 
your mercy for graceful operations on workers is 60 seconds 
mapped 436608 bytes (426 KB) for 5 cores 
*** Operational MODE: preforking *** 
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x19faca0 pid: 20775 (default app) 
*** uWSGI is running in multiple interpreter mode *** 

Через некоторое время (около 1 день от запуска uWSGI является достаточно, чтобы увидеть эффект), я Получают десятки открытых процессов. Скриншот HTOP (через несколько часов после перезагрузки):

htop output uwsgi/flask

Это становится намного дольше после того, как один день. Конечно, API становится менее отзывчивым. Как я могу отладить это? Любой способ увидеть, что поддерживает все эти процессы и подпроцессы? Обратите внимание, что API на самом деле не занят. На самом деле, я использую его только сейчас, и он редко имеет значительную нагрузку и никогда ничего близкого к требованию десятков процессов.

Любые идеи о том, как отладить эту проблему инфляции процесса?

+1

Это проблема конфигурации uWSGI. Включены ли потоки, каков ваш режим форсирования и т. Д. (Не входите в конфигурацию подробно) –

+0

Темы отключены, режим предпродак. Добавлена ​​сводка автозагрузки. –

+0

@FreekWiekmeijer, спасибо, ваш запрос подтолкнул меня в правильном направлении. По-видимому, это была проблема включения-потоков. –

ответ

2

Если кто-либо видит эту проблему с аналогичной настройкой, проблема связана с отключенными нитями. uWSGI указывает на это при запуске (см вопрос тело):

*** Python threads support is disabled. You can enable it with --enable-threads *** 

добавить параметр командной строки --enable-threads или добавить следующее в uWSGU .ini файле инициализации: enable-threads=true

Я сделал использовать модуль поточной в коде и uWSGI не запускает больше процессов после включения потоков.