Django manage.py создает несколько процессов fcgi

Любая идея, какая разница между двумя командами ниже?

Команда: manage.py runfcgi method = threaded host = 127.0.0.1 port = 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 будет использовать больше памяти, поскольку процесс использует больше памяти, чем поток. Для запуска потребуется немного больше времени, так как forking занимает больше времени, чем создание нового потока. Однако, как правило, для предпродажной обработки загружается лучше, чем потоки, поэтому, если ваше приложение имеет большую нагрузку, оно может работать лучше с предпродачей (если это не так, вы, вероятно, не заметите большой разницы в любом случае).

Почему вторая команда запускает 6 процессов? Как вы ограничиваете количество процессов, порожденных?

Django будет порождать число процессов по умолчанию, если вы не укажете, сколько из них будет создано. Вы можете изменить это с помощью параметров maxspare или maxchildren.

licensed under cc by-sa 3.0 with attribution.