В настоящее время я использую 125 сайтов Django на одном выделенном сервере GoDaddy. Сайты имеют относительно низкий трафик, и мне интересно, что я могу сделать, чтобы оптимизировать использование памяти в моей конфигурации apache. До того, как я настроил директивы prefork на более низкие значения MaxServer и MaxrequestsPerChild, коробка зависала примерно через 5 часов работы.
Я искал в Google ответы, но не могу придумать ничего определенного для следующего:
Текущий файл конфигурации включен ниже:
<VirtualHost *:80>
ServerAdmin webmaster@domain.com
DocumentRoot /var/www/projectroot/django/chat/static
ServerName domain.com
ServerAlias www.domain.com
Alias /media /usr/lib/python2.5/site-packages/django/contrib/admin/media
ErrorLog logs/www.domain.com-error_log
CustomLog logs/www.domain.com-access_log common
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonPath "['/var/www/domain/django'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE chat.settings_domain1 #chat is the name of the project all the sites reside in
PythonDebug Off
</Location>
<Location "/media">
SetHandler None
</Location>
<Location "/site_media">
SetHandler None
</Location>
</VirtualHost>
Спасибо! -Том
Было бы определенно разумно избегать mod_python. Тем не менее, не используйте встроенный режим mod_wsgi. Причины, по которым встроенный режим плохой, подробно описаны в:
http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html
Возможно, это проблема, с которой вы столкнулись.
Вы можете использовать режим демона mod_wsgi. Тем не менее, было бы предпочтительнее, чтобы ваши сайты Django были потокобезопасными, поскольку это позволило бы минимизировать общее количество процессов демона.
Утверждение, что режим демона mod_wsgi несовместим с предварительным форком Apache, неверно. Вы можете использовать режим демона mod_wsgi с любым MPM Apache. Проблема заключается в том, имеет ли базовая библиотека времени выполнения Apache встроенные возможности потоковой передачи, а не в том, используется ли MPM prefork или worker. Обычно это имеет место и только в системе, где это не старые системы BSD, в которых реализованы реализации потоковой передачи. В любом случае, вам все равно лучше использовать рабочий MPM, так как количество необходимых дочерних процессов сервера Apache сокращается.
В любом случае, использование режима демона mod_wsgi должно быть относительно простым. Проблема будет в том, чтобы определить, являются ли ваши сайты Django потокобезопасными или нет.
Я определенно выбрал бы mod_wsgi. Он позволяет вам определять пользователей, количество потоков / процессов для каждого приложения.
Я не совсем уверен в требованиях к памяти, но mod_python считается уступающим mod_wsgi практически во всех часто задаваемых вопросах или подсказках, которые вы видите. WSGIDaemonProcess позволяет вам настроить множество опций, размер стека, количество процессов и различные тайм-ауты, которые могут вас заинтересовать.
У меня нет опыта работы с GoDaddy, поэтому я не могу сказать вам, как далеко вы можете зайти, настраивая все.
Для части apache я бы определенно использовал prefork с правильными числами (зависит от ожидаемого количества пользователей, сколько детей вы хотите разрешить)
Для статического хостинга вы можете отключить все обработчики и даже принудительно установить определенный MIME-тип, чтобы конфигурация работала.
Если память является вашим узким местом, вы, возможно, захотите проверить ngninx по моему опыту (не так уж много), использование памяти с nginx может быть предсказано намного лучше, чем с apache, однако я понятия не имею о mod-wsgi + ngninx.
Редактировать: Не обращайте внимания на первый абзац. См. Комментарий и ответ Грэма.
Предварительный форк Apache несовместим с режимом демона wsgi. По документация, режим демона требует многопоточности. Поэтому, если вам нужна гибкость режима демона, вам нужно использовать Apache mpm worker.
На основе этого блога Почта, Я бы не стал использовать mod_wsgi из nginx.
Поэтому я предпочитаю использовать nginx в качестве легкого, интерфейсного / статического файлового сервера с Apache mpm worker и mod_wsgi в режиме демона, обслуживающего содержимое Django.