Развертывание Django: сокращение расходов на Apache

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

  • prefork MPM - это многопроцессорный/однопоточный.
  • рабочий MPM - многопроцессорный/многопоточный.
  • winnt MPM в одном процессе/многопоточном.

Ответ 3

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

Ответ 4

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