Django + mod_wsgi + apache2 - 子进程 XXX 仍然没有退出,发送一个 SIGTERM
Posted
技术标签:
【中文标题】Django + mod_wsgi + apache2 - 子进程 XXX 仍然没有退出,发送一个 SIGTERM【英文标题】:Django + mod_wsgi + apache2 - child process XXX still did not exit, sending a SIGTERM 【发布时间】:2013-11-22 08:59:12 【问题描述】:我遇到间歇性错误 -
子进程 XXX 仍然没有退出,发送一个 SIGTERM.. 然后是一个 SIGKILL。间歇性出现,网页挂起。
我没有使用守护进程..但现在我使用了,问题仍然存在..
我也有一些错误打开文件读取:权限被拒绝。
有人可以帮忙吗?
我是这个论坛的新手,如果之前已经回答过,很抱歉。
【问题讨论】:
【参考方案1】:如果您没有使用 mod_wsgi 的守护程序模式,则意味着在显示初始消息时必须重新启动 Apache。
发生的情况是,在尝试重新启动时,Apache 向其子进程发送了一个 SIGTERM。如果他们没有自行退出,它将以 1 秒的间隔再次发送 SIGTERM,最后在 3 秒后发送 SIGKILL。该消息警告您后者并强制终止该进程。
现在的问题是导致进程无法立即关闭的原因。这可能有多种原因。
使用不能在子解释器中正常工作的 Python 扩展模块会导致进程死锁并挂起,从而阻止进程关闭。 http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
在 Python Web 应用程序中使用未正确设置为守护线程的后台线程,结果它们会阻塞进程关闭。
您的 Web 应用程序只是试图以某种方式在进程关闭方面做太多事情,并且没有在时间限制内完成。
即使使用守护程序模式,您也可能会看到这种行为,因为它实现了类似的关闭超时,尽管超时可针对守护程序模式进行配置。
无论如何,按照上面的文档链接中的说明强制使用主要的 Python 解释器
关于权限问题,请阅读:
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Access_Rights_Of_Apache_User
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Application_Working_Directory
简而言之,确保您需要访问的文件/目录的访问权限是正确的,并确保您在访问文件系统时始终使用绝对路径名。
【讨论】:
非常感谢,添加 WSGIApplicationGroup %GLOBAL 以解决 SIGTERM 问题。它是间歇性的,不确定它是否修复了它。我会让你知道。关于权限被拒绝,我注意到它在 apache 重新启动时即将到来 - 像这样 -“[Sun Nov 10 20:05:44 2013] [notice] SIGUSR1 received.Doing graceful restart” 然后打开文件读取时出错:权限被拒绝错误打开文件进行阅读:权限被拒绝 但那是 Python 异常的一部分,还是实际的 Apache 错误。以上是关于Django + mod_wsgi + apache2 - 子进程 XXX 仍然没有退出,发送一个 SIGTERM的主要内容,如果未能解决你的问题,请参考以下文章
使用 mod_wsgi 在 apache 上设置 Django
Django,apache,mod_wsgi - 错误:脚本头过早结束
Apache + mod_wsgi + django:为积压的请求发送默认响应
使用 Apache 和 mod_wsgi 在 Centos 上设置 Django
Django + mod_wsgi + apache:ImportError at / No module named djproj.urls