Django + mod_wsgi + apache2 — дочерний процесс XXX все еще не завершился, отправив SIGTERM

Я получаю периодические ошибки -

дочерний процесс XXX все еще не завершился, отправив SIGTERM... а затем SIGKILL. Это происходит периодически, и веб-страница зависает.

Я не использовал процесс Daemon ... но теперь я использую, но проблема все еще существует ...

Также у меня есть ошибка при открытии файла для чтения: Отказано в доступе.

Пожалуйста, может кто-нибудь помочь?

Я новичок на этом форуме, так что извините, если уже был ответ.


person I go by just P    schedule 10.11.2013    source источник


Ответы (1)


Если бы вы не использовали режим демона mod_wsgi, это означало бы, что Apache должен быть перезапущен во время отображения исходного сообщения.

Происходит следующее: при попытке перезапустить Apache отправляет SIGTERM своим дочерним процессам. Если они не уйдут по собственному желанию, он снова отправит SIGTERM с интервалом в 1 секунду и, наконец, отправит SIGKILL через 3 секунды. Сообщение предупреждает вас о последнем и о том, что оно принудительно убило процесс.

Теперь проблема заключается в том, что заставляет процесс не завершаться быстро. Для этого могут быть разные причины.

  • Использование модуля расширения для Python, который не работает должным образом в подинтерпретаторах, что блокирует и зависает процесс, предотвращая его завершение. http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

  • Использование фоновых потоков в веб-приложении Python, которые не были правильно настроены как потоки демона, в результате чего они затем блокируют завершение процесса.

  • Ваше веб-приложение просто каким-то образом пытается сделать слишком много при завершении процесса и не завершает работу в установленные сроки.

Даже если вы используете режим демона, вы, вероятно, увидите такое поведение, поскольку он реализует аналогичный тайм-аут выключения, хотя тайм-аут настраивается для режима демона.

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

Что касается проблемы с разрешениями, прочитайте:

Короче говоря, убедитесь, что права доступа верны для файлов/каталогов, к которым вам нужно получить доступ, и убедитесь, что вы всегда используете абсолютные пути при доступе к файловой системе.

person Graham Dumpleton    schedule 10.11.2013
comment
Большое спасибо, добавлена ​​группа WSGIApplicationGroup %{GLOBAL} для решения проблемы с SIGTERM. Это прерывисто, не уверен, что это исправило это. Я дам тебе знать. Что касается отказа в разрешении, я заметил, что он появляется при перезапуске apache - вот так - [Вс, 10 ноября, 20:05:44 2013] [уведомление] SIGUSR1 получен. Выполняется изящный перезапуск, а затем Ошибка при открытии файла для чтения: Отказано в доступе Ошибка при открытии файла для чтения: Отказано в доступе - person I go by just P; 11.11.2013
comment
Но является ли это частью исключения Python или фактической ошибкой Apache. - person Graham Dumpleton; 11.11.2013