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

Apache перестает обслуживать запрос

Я запускаю django с mod_wsgi, и большую часть времени все работает нормально, но иногда я замечаю, что внезапно Apache перестает обслуживать любые запросы, служба мониторинга на сервере сообщает, что httpd все еще работает, но запросы занимают слишком много времени и не работают с преждевременными заголовками сценариев .

Я запускаю эту настройку на RHEL с python 2.6

директивы WSGI

WSGISocketPrefix /var/run/wsgi
WSGIScriptAlias / /srv/bin/bootstrap.wsgi
WSGIDaemonProcess bstapp user=django-user group=django-user
WSGIProcessGroup bstapp

То, что вы получаете «преждевременные заголовки скриптов», указывает мне, что вы используете режим демона. Тем не менее, это все равно поможет, если вы измените свой вопрос и добавите в конце конкретную конфигурацию mod_wsgi, которую вы используете, чтобы было ясно, что вы делаете, а не гадать.

Теперь, когда вы получаете «преждевременные заголовки скриптов», это также указывает на то, что процессы вашего демона падают. Вы должны посмотреть в основном журнале ошибок Apache, есть ли какие-либо сообщения журнала о «нарушении сегментации» или аналогичных. Также установите для Apache LogLevel как минимум значение «информация», а не «предупреждать». Это заставит mod_wsgi записывать больше о том, что происходит, и почему он думал, что процесс демона завершается.

Если это сбой, и у вас есть только одно приложение WSGI, запущенное в группе процессов демона, установите:

WSGIApplicationGroup %{GLOBAL}

Это позволит избежать различных проблем, вызванных сторонними пакетами Python, которые используют компонент расширения C, где компонент расширения C не реализован должным образом для работы во вспомогательных интерпретаторах. Это может решить проблему сбоя, но также, если модуль расширения является мертвой блокировкой и в результате вызывает нехватку потоков, это также может исправить проблемы с приложением, которое больше не обрабатывает запросы.

Итак, добавьте эту конфигурацию к вашему вопросу и измените LogLevel, чтобы получать больше сообщений из mod_wsgi. Наконец, принудительно используйте основной интерпретатор с помощью этой директивы.