Развертывание Django: сокращение накладных расходов Apache - PullRequest
9 голосов
/ 28 января 2009

У меня есть небольшой VPS-сервер с внешним интерфейсом Nginx, который обслуживает статические мультимедийные файлы и передает запросы Django обратно на сервер prefork MPM Apache 2.2, на котором работает mod_wsgi.

С одним (очень) небольшим сайтом, загруженным и работающим, в настоящее время используется 143 МБ 256 МБ ОЗУ.

Используя команду top, я вижу, что Apache использует 52,9% доступной оперативной памяти, а memcache в секунду - 2,1%.

Учитывая, что я планирую разместить довольно много проектов Django на этом одном сервере, мне интересно, есть ли что-нибудь, что я могу сделать, чтобы обрезать объем ОЗУ, который использует Apache?

Ответы [ 4 ]

8 голосов
/ 29 января 2009

Если вы хотите придерживаться Apache, несколько советов, примерно в порядке сложности:

  • использовать рабочий MPM Apache вместо prefork. Реальная память, используемая для подключения клиента, будет ниже, но имейте в виду, что виртуальная память, выделенная для Apache в Linux, может быть очень высокой из-за 8 МБ, выделяемых Linux для стека каждого потока. Это на самом деле не имеет значения, если только ваш VPS не имеет мозгов и не ограничивает виртуальную память, а не реальную память RSS (резидентного размера). В этом случае вы можете узнать, как уменьшить размер стека потоков здесь (в разделе VPS с ограниченным объемом памяти).
  • измените файл конфигурации Apache и примерно пропорционально уменьшите параметры StartServers, MaxClients, MinSpareThreads и MaxSpareThreads. Соответствующими уровнями будет баланс между вашим желаемым использованием памяти и количеством одновременно работающих клиентов, которые вам необходимо обслужить.
  • переключиться на mod_wsgi (в режиме демона) вместо mod_python.
6 голосов
/ 24 июня 2009

Для записи, использование ОП термина MPM бессмысленно. MPM в Apache не вариант, вы всегда используете MPM при использовании Apache. Выбор - какой MPM вы используете. В UNIX два основных MPM или многопроцессорных модуля - prefork и worker. В Windows всегда используется winnt MPM. Подробную информацию о различных MPM можно найти в документации Apache на веб-сайте Apache. Тем не менее, в контексте mod_wsgi вам лучше прочитать:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

Короче говоря:

  • prefork MPM - многопроцессный / однопоточный.
  • рабочий MPM является многопроцессорным / многопоточным.
  • winnt MPM в однопроцессном / многопоточном режиме.
3 голосов
/ 28 января 2009

Возможно, вы захотите использовать Spawning для развертывания.

2 голосов
/ 28 января 2009

вы можете запустить Django на FastCGI. Затем nginx может управлять им напрямую, а не через Apache.

...