Развертывание 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.