如何调试apache以了解它为什么重新启动mod_wsgi进程?这怎么可能发生?
我有一个运行带有mod_wsgi的Apache / 2.4.7(Ubuntu)的django应用程序 - 单进程,多线程。我的python日志文件中有消息,只有在进程首次初始化时才会发生 - 只有在我手动重启apache之后......但是apache还没有重启。我也没有在apache访问/错误日志中看到任何内容。 apache是否会重新启动它自己的进程?
不久之后,apache基本上停止了为任何请求提供服务 - 好像它已经挂起或崩溃了,我需要重新启动apache。
之前从未见过 - 有什么我可以监控以深入了解apache的状态吗?
配置的相关部分如下所示:
### Apache/sites-enabled/main.wsgi:
<VirtualHost 0.0.0.0:443>
SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCACertificateFile ...
Options ExecCGI FollowSymLinks MultiViews
AddHandler wsgi-script .wsgi
WSGIDaemonProcess myapp
WSGIProcessGroup myapp
WSGIScriptAlias / /myproject/myapp.wsgi
<Directory /myproject/scripts>
<Files myapp.wsgi>
Require all granted
</Files>
</Directory>
</VirtualHost>
#### /myproject/scripts/myapp.wsgi:
#!/usr/bin/python
import os
import sys
sys.path.append('/usr/local/lib/python2.7/site-packages')
sys.path.append('/myproject')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
除了指示重新启动进程的自定义初始化日志条目外,我在apache-error.log中注意到以下内容:
[Mon Sep 15 17:43:35 2014] [core:error] [pid 2801:tid 140079485876000] [client 111.111.111.111:64444] End of script output before headers: myapp.wsgi, referer: https://mysite.com/login.html
答案 0 :(得分:3)
将Apache LogLevel设置为&#39; info&#39;:
LogLevel info
这将导致mod_wsgi输出有关重启守护进程的更多消息。
提供相关的日志消息。
同时确保错误地在嵌入模式下没有任何内容运行。
WSGIRestrictEmbedded On
如果您的应用程序挂起,那么问题可能是您使用的Python模块在Python子解释器中不起作用。要解决这个问题,请设置:
WSGIApplicationGroup %{GLOBAL}
有关详细信息,请参阅:
你可能也会看:
它解释了很多关于Apache如何使用嵌入式模式重启进程以及可能导致的问题。