Колба/uWSGI-слишком много процессов через некоторое время
Все, я разрабатываю API на основе flask, используя uWSGI v2) в качестве сервера приложений (w/ NGINX, если это уместно). Время на uwsgi .ini-файл:
[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
Обновление: вот вывод сводки запуска 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 (через несколько часов после перезагрузки):
Это становится намного длиннее после дня. Конечно, API становится менее отзывчивым. Как я могу это сделать? отладить это? Есть ли способ увидеть, что держит все эти процессы и подпроцессы открытыми? Обратите внимание, что API на самом деле не так уж и занят. Я действительно единственный, кто использует его сейчас, и он редко имеет какую-либо значительную нагрузку, и никогда ничего близкого к тому, чтобы требовать десятки процессов.
Есть идеи, как отладить этот процесс инфляционной проблемы?
1 ответ:
Если кто-то видит эту проблему с аналогичной установкой, проблема заключалась в том, что потоки были отключены. uWSGI указывает на это при запуске (см. Тело вопроса):
*** Python threads support is disabled. You can enable it with --enable-threads ***
Добавьте параметр командной строки
--enable-threads
или добавьте в uWSGU следующее .файл инициализации ini:enable-threads=true
Я использовал модуль threading в коде, и uWSGI не порождает больше процессов, как только потоки были включены.