我有一个基于 Ubuntu Server 9.10 的 Web 服务器,其中装有以下软件:
apache 2
PHP 5.3
MySQL 5
Python 2.5
我的网站很少基于 PHP,很少有通过 mod_wsgi 使用 python/django 的网站。
大约一个月以来,我的 Apache 服务器每天都会停止响应,直到我手动重新启动它。
错误日志显示:
[Fri Mar 05 17:06:47 2010] [error] could not make child process 25059 exit, attempting to continue anyway
[Fri Mar 05 17:06:47 2010] [error] could not make child process 25061 exit, attempting to continue anyway
[Fri Mar 05 17:06:47 2010] [error] could not make child process 24930 exit, attempting to continue anyway
[Fri Mar 05 17:06:47 2010] [error] could not make child process 25084 exit, attempting to continue anyway
[Fri Mar 05 17:06:47 2010] [error] could not make child process 25105 exit, attempting to continue anyway
等等。
我尝试过了谷歌一下这个问题但似乎我无法在那里找到解决方案。
我如何确定此错误的原因以及如何修复它?
感谢您的帮助。
更新
- 将 mod-wsgi 更新至 3.1 版本未能解决问题
- 更新 PHP 至 5.3 也未能解决问题
以下是所有已安装模块的列表:
core
mod_log_config
mod_logio
prefork
http_core
mod_so
mod_alias
mod_auth_basic
mod_authn_file
mod_authz_default
mod_authz_groupfile
mod_authz_host
mod_authz_user
mod_autoindex
mod_cgi
mod_deflate
mod_dir
mod_env
mod_mime
mod_negotiation
mod_php5 mod_rewrite
mod_setenvif
mod_status
mod_wsgi
以下是我的带有 wsgi 的虚拟主机的样子:
<VirtualHost *:80>
ServerName example.net
DocumentRoot /var/www/example.net
#wcgi script that serves all the thing
WSGIScriptAlias / /var/www/example.net/index.wsgi
WSGIDaemonProcess example user=wsgideamonuser group=root processes=1 threads=10
WSGIProcessGroup example
Alias /static /var/www/example.net/static
#serving admin files
Alias /media/ /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
<Location "/static">
SetHandler None
</Location>
<Location "/media">
SetHandler None
</Location>
ErrorLog /var/www/example.net/error.log
</VirtualHost>
错误日志现在包含两种相互关联的错误类型:
[error] child process 9486 still did not exit, sending a SIGKILL
[error] could not make child process 9106 exit, attempting to continue anyway
答案1
该错误来自 Apache 源代码中的 server/mpm_common.c。当 Apache 去回收服务器子进程时(大概是当它们被触发关闭时),这些进程实际上并没有死亡。这些进程可能由于某种原因挂起了。
为了消除 mod_wsgi 或 Python 问题,请确保您使用的是 mod_wsgi 3.1,并使用 mod_wsgi 的守护进程模式(而不是嵌入模式)。