Django manage.py порождает несколько процессов fcgi
Любая идея, в чем разница между двумя командами ниже?
Команда: manage.py runfcgi метод = многопоточный хост =127.0.0.1 порт =3033
labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs 14558 0.0 2.2 65948 8212 ? Sl Oct19 0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Команда: python manage.py runfcgi host =127.0.0.1 port = 7021 protocol = fcgi pidfile = / tmp / myproject.fcgi.pid
labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs 21082 0.0 2.8 15440 10472 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21083 0.0 2.7 15440 10084 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21084 0.0 2.7 15440 10084 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21085 0.0 2.7 15440 10084 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21086 0.0 2.7 15440 10084 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs 21087 0.0 2.7 15440 10084 ? S 22:27 0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
Вторая команда выглядит так, как будто она запускает 6 процессов с выделением памяти для каждого из них.
- Что будет лучшим вариантом, если у вас недостаточно памяти? и работает несколько экземпляров Django?
- Почему вторая команда порождает 6 процессов?
- Каковы преимущества / недостатки каждого подхода?
- Как вы ограничиваете количество порожденных процессов?
1 ответ
Причина, по которой вы видите несколько процессов, заключается в том, что runfcgi
использования method=prefork
по умолчанию. С помощью этого метода группа процессов FCGI разветвляется для обработки запросов; очевидно method=threaded
вместо этого использует многопоточный процесс FCGI.
У каждого есть свои преимущества и недостатки. Метод prefork будет использовать больше памяти, поскольку процесс использует больше памяти, чем поток. Это также займет немного больше времени для запуска, так как разветвление занимает больше времени, чем создание нового потока. Однако, как правило, дескрипторы предварительной обработки загружаются лучше, чем потоки, поэтому, если ваше приложение имеет высокую нагрузку, оно может работать лучше с предварительной обработкой (если этого не произойдет, вы, вероятно, не заметите большой разницы в любом случае).
Почему вторая команда порождает 6 процессов? Как вы ограничиваете количество порожденных процессов?
Django будет порождать количество процессов по умолчанию при префоркинге, если вы не укажете, сколько порождать. Вы можете изменить это с помощью maxspare
или же maxchildren
опции.