процесс mod_wsgi убивается и django перестает работать - PullRequest
6 голосов
/ 07 июля 2011

У меня есть mod_wsgi, работающий в режиме демона в пользовательской сборке Linux.Я не включил номер для процессов или потоков в конфигурацию apache.Вот мой конфиг:

WSGIDaemonProcess django user=admin
WSGIProcessGroup django
WSGIScriptAlias /django_apps /django/apache/django.wsgi
WSGIApplicationGroup %{GLOBAL}

В системе запущен процесс очистки httpd, который убивает любой процесс httpd, превышающий определенный порог памяти.

Похоже, что процесс httpd, на котором запущен mod_wsgi, погибает.После этого часть моего сайта на django перестает работать.

Я получаю это сообщение об ошибке:

Script timed out before returning headers: django.wsgi

Каждый раз, когда я получаю доступ к странице django, я получаю следующие сообщения журнала:

<6> Jul  7 10:13:11 httpd[12598]: [info] mod_wsgi (pid=12598): Initializing Python.
<6> Jul  7 10:13:11 httpd[12598]: [info] mod_wsgi (pid=12598): Attach interpreter ''.
<6> Jul  7 10:13:16 httpd[12638]: [info] mod_wsgi (pid=12638): Attach interpreter ''.
<6> Jul  7 10:13:17 httpd[12615]: [info] mod_wsgi (pid=12615): Destroying interpreters.
<6> Jul  7 10:13:17 httpd[12615]: [info] mod_wsgi (pid=12615): Cleanup interpreter ''.
<6> Jul  7 10:13:17 httpd[12615]: [info] mod_wsgi (pid=12615): Terminating Python.
<6> Jul  7 10:13:17 httpd[12615]: [info] mod_wsgi (pid=12615): Python has shutdown.

Может кто-нибудь помочь мне понятьсобирается здесь.Почему процесс mod_wsgi не может перезапуститься?Как мне настроить его на корректный перезапуск?

Заранее большое спасибо.

1 Ответ

7 голосов
/ 07 июля 2011

Для начала прочитайте:

http://blog.dscpl.com.au/2009/11/save-on-memory-with-modwsgi-30.html

и отключить инициализацию интерпретатора Python во встроенных процессах, если используется только режим демона. Эти сообщения журнала, вероятно, поступают от встроенных процессов и отображаются из-за чрезмерно агрессивных настроек Apache MPM, которые приводят к тому, что основные дочерние процессы Apache запускаются и часто закрываются. Отключите неиспользуемые переводчики, и, вероятно, эти сообщения исчезнут.

Эта проблема является отдельной от вашей проблемы с процессом режима демона.

Для этого установите в WSGIDaemonProcess параметр 'display-name =% {GROUP}'. Это приведет к тому, что процесс в режиме демона отобразится как '(wsgi: django)' в списке вывода ps. Таким образом, вы можете четко определить, какой это процесс.

Затем, когда ваш убийца процесса начинает работать, используйте «ps», чтобы проверить состояние процесса, а также, существует ли он и правильно ли он завершился. Может случиться так, что процесс отказывается завершать работу, поскольку зависает в ожидании завершения работы какого-либо дочернего процесса или зависает в какой-либо операции удаленной файловой системы. В качестве альтернативы код регистрирует обработчик сигнала, который мешает правильному выключению.

Если этот процесс не завершает работу должным образом, он не будет заменен, однако инициирование завершения работы может привести его в состояние, при котором он также не принимает новые запросы.

Итак, начните с этого и доложите, что вы нашли.

Кстати, есть официальный список рассылки mod_wsgi. StackOverflow - плохая среда для отладки подобных проблем.

...