Во-первых, мне нужна помощь в настройке параметров Django и Apache, чтобы точно настроить их для моего сайта для обеспечения максимальной эффективности затрат.
Информация о сервере: сервер Django 1.3 Webfacion, в настоящее время выделено 80 МБ оперативной памяти. Я особо не касался http.conf, который уже предоставляет Webfaction. Мой сайт еще не выпущен, но он запущен в производственной среде и занимает около 17 МБ в основном процессе и около 30 МБ в целом. Сегодня я провел некоторое нагрузочное тестирование, и оно никогда не превышало 20 МБ для основного процесса.
Информация о сайте: одно приложение Django, производительность отличная, все загружается быстро (сейчас очень низкий трафик). Я использую только несколько файлов шаблонов, и они обслуживаются моим nginx. У меня всего несколько моделей, и все обработчики извлекают данные с разбиением на страницы, и ни одна из них не загружает более 25 записей в QuerySet за один раз. Шаблон очень прост, просто помещает некоторые медиа в html и несколько переменных json, пользовательский интерфейс на стороне клиента управляется js. В настоящее время я не использую систему кеширования django. Я планировал обновить и получить на 80 МБ больше оперативной памяти, последнее, что я хочу сделать, - это чтобы сайт стал популярным и рухнул.
Есть ли какие-нибудь инструменты для имитации трафика? Что на самом деле помогло бы 80mb больше RAM? Есть ли место, где я могу получить профессиональный совет от людей, действительно разбирающихся в этом вопросе? (Я был бы готов заплатить им).
Любые ответы были бы замечательными. Заранее спасибо.
Обновление: все работает нормально, я просто хочу его настроить. вот файл httpd.conf:
ServerRoot "/home/pllee/webapps/django/apache2"
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule wsgi_module modules/mod_wsgi.so
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /home/pllee/logs/user/access_django.log combined
ErrorLog /home/pllee/logs/user/error_django.log
KeepAlive Off
Listen 22504
MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
WSGIDaemonProcess django processes=5 python-path=/home/pllee/webapps/django:/home/pllee/webapps/django/lib/python2.7 threads=1
WSGIPythonPath /home/pllee/webapps/django:/home/pllee/webapps/django/lib/python2.7
WSGIScriptAlias / /home/pllee/webapps/django/SiteName.wsgi
Вы можете закомментировать строку:
WSGIDaemonProcess django processes=5 \
python-path=/home/pllee/webapps/django:/home/pllee/webapps/django/lib/python2.7 \
threads=1
для начала. Эта строка абсолютно ничего не делает, за исключением запуска пяти процессов, которые затем бездействуют и ничего не делают.
Это ошибка, которую WebFaction совершает некоторое время. Они указывают группу процессов демона, но на самом деле не определяют директиву WSGIProcessGroup, чтобы mod_wsgi запускал в ней ваше приложение WSGI.
Следующее, что вы можете сделать, поскольку вы запускаете только одно приложение WSGI, это добавить:
WSGIApplicationGroup %{GLOBAL}
Это заставит приложение WSGI работать в основном интерпретаторе процессов и избежать создания второго вспомогательного интерпретатора. Использование основного интерпретатора позволит избежать различных проблем со сторонними модулями расширения C, которые не реализованы для правильной работы во вспомогательных интерпретаторах.
Это простые вещи, которые вы можете сделать, хотя они просто отнимают часть памяти.
В целом, на практике узкие места не будут в основном механизме веб-хостинга. Таким образом, вы можете захотеть посмотреть, какие инструменты мониторинга вы можете использовать для отслеживания вещей и выявления узких мест. Для среды разработки у вас есть панель инструментов отладки Django, но она будет весьма ограничивающей и полезной только для отладки известной проблемы, а не для определения источника проблем. Для последнего вам действительно нужны инструменты для мониторинга производства, и в этом случае вы можете взглянуть на New Relic, который для Python сейчас находится в бета-версии. Да, я работаю в New Relic, и я хочу, чтобы я делаю это, но хотя это платная услуга с полным набором функций, у нее есть бесплатная версия Lite. Хотя во время бета-тестирования он является бесплатным для всех функций, возможно, стоит взглянуть, поскольку он может помочь вам улучшить работу вашего приложения, чтобы вы не так беспокоились об увеличении трафика в будущем.