uwsgi: почему для каждого приложения загружаются два процесса?

root@www:~# ps aux | grep uwsgi
root      4660  0.0  0.0  10620   892 pts/1    S+   19:13   0:00 grep --color=auto uwsgi
root     19372  0.0  0.6  51228  6628 ?        Ss   06:41   0:03 uwsgi --master --die-on-term --emperor /var/www/*/uwsgi.ini
root     19373  0.0  0.1  40420  1292 ?        S    06:41   0:03 uwsgi --master --die-on-term --emperor /var/www/*/uwsgi.ini
www-data 19374  0.0  1.9  82640 20236 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app2/uwsgi.ini
www-data 19375  0.0  2.4  95676 25324 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app3/uwsgi.ini
www-data 19385  0.0  2.1  90772 22248 ?        S    06:41   0:03 /usr/local/bin uwsgi --ini /var/www/app2/uwsgi.ini
www-data 19389  0.0  2.0  95676 21244 ?        S    06:41   0:00 /usr/local/bin uwsgi --ini /var/www/app3/uwsgi.ini

выше ps вывод процессов uwsgi. Странно то, что для каждого ini-файла загружается два экземпляра - даже у меня есть два мастера uwsgi. это нормально?

стратегия развертывания uwsgi такова

  • Иметь императора под управлением выскочки
  • Император ищет каждое uwsgi.ini в папке приложений

uwsgi.conf для выскочки:

# simple uWSGI script

description "uwsgi tiny instance"
start on runlevel [2345]
stop on runlevel [06]

exec uwsgi --master --die-on-term --emperor "/var/www/*/uwsgi.ini"

uwsgi.ini (у меня есть два приложения, и оба приложения имеют одинаковый INI, за исключением нумерации приложений):

[uwsgi]
# variables
uid = www-data
gid = www-data
projectname = myproject
projectdomain = www.myproject.com
base = /var/www/app2
# config
enable-threads
protocol = uwsgi
venv = %(base)/
pythonpath = %(base)/
wsgi-file = %(base)/app.wsgi
socket = /tmp/%(projectdomain).sock
logto = %(base)/logs/uwsgi.log

person thkang    schedule 13.09.2013    source источник
comment
Вы решили эту проблему, только удалив флаг --master? Я по-прежнему получаю два дочерних процесса, созданных для моего приложения, даже когда я удалил флаг --master и у меня есть только один императорский процесс.   -  person Fenikso    schedule 15.12.2014


Ответы (2)


Вы запустили его с опцией --master, которая порождает главный процесс для управления рабочими процессами.

Из официальной документации https://uwsgi-docs.readthedocs.org/en/latest/Glossary.html?highlight=master

мастер

Встроенный в uWSGI режим управления prefork+threading с несколькими рабочими процессами, который активируется включением главного переключателя. Для всех практических развертываний обслуживания не очень хорошая идея не использовать основной режим.

Вы должны прочитать http://uwsgi-docs.readthedocs.org/en/latest/Options.html#master В этой ветке также может быть информация для вас. uWSGI: --master with --emperor порождает двух императоров

Обычно не рекомендуется использовать --master и --emperor вместе.

person Kirill Zaitsev    schedule 13.09.2013
comment
спасибо, я слепо следил за учебными пособиями по выскочкам на их странице документа: uwsgi-docs.readthedocs.org/en/latest/ - person thkang; 13.09.2013

Мое обоснованное предположение по этой теме состоит в том, что это действительно должно быть передано в Server Fault. Но вот ответ:

Вы должны были запустить сценарий выскочки два раза ;-)

Просто попробуйте убить основной процесс ROOT с помощью SIGTERM и посмотреть, не умер ли дочерний процесс. Если вы запустили сценарий выскочки дважды, у вас останется один ROOT и два дочерних элемента.

person Dr I    schedule 13.09.2013