Назад | Перейти на главную страницу

Способ настройки apache для ~ 125 сайтов django для оптимизации использования памяти (mod_python v mod_wsgi; worker vs prefork; статические файлы)

В настоящее время я использую 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.