故障排除mod-wsgi线程死亡

我们面向公众的Web服务器上的WSGI守护进程已经死机,并且需要重新加载Apacheconfiguration才能重新启动它。 所有的error.log说是:

 Script timed out before returning headers: wsgi.py 

(和相同的消息,referer: url appendend)。 我找不到任何其他日志,并没有看到任何明显的方式来启用mod-wsgi中的其他诊断。 根据进程列表线程停止退出。 有人知道在哪里寻找或什么configuration添加以获得更多的信息下一次发生?

守护进程被configuration为

 WSGIScriptAlias /pootle /usr/share/doc/pootle/wsgi.py WSGIDaemonProcess pootle user=pootle group=pootle processes=1 threads=3 stack-size=1048576 maximum-requests=10 inactivity-timeout=30 display-name=%{GROUP} WSGIProcessGroup pootle WSGIApplicationGroup pootle WSGIPassAuthorization On 

最大的请求是如此之低,因为应用程序似乎在泄漏内存(幸运的是,这个应用程序并不那么重要,用户也很less)。 Apache,wsgi和django是版本(Debian Squeeze):

  • apache2-mpm-prefork 2.2.16-6 + squeeze11
  • libapache2-mod-wsgi 3.3-2
  • python-django 1.2.3-3 + squeeze5
  • python-django-djblets 0.5.10〜alpha0 + git201005030944-2
  • python-django-registration 0.7-2

这是在这台服务器上运行的唯一的wsgi应用程序; 还有一些其他更重要的应用程序在同一台服务器上,但在PHP中。

我会推荐至lessApache 2.2.18或更高版本。 Apache版本2.2.15-2.2.17左右的类似问题的发生率更高。 新版本的Apache版本没有问题。

另外,你使用:

 WSGIApplicationGroup %{GLOBAL} 

如果您正在使用Python的第三方软件包,它有一个C扩展名,并且在子解释器中没有正确执行,它可以locking。 解决scheme是强制使用该指令使用主解释器。