Apache使整个系统无响应

系统运行Ubuntu 10.04,运行Apache / 2.2.14(Ubuntu)

它发生在今天我注意到服务器是非常反应(花5分钟以上login到SSH)。 在查看系统资源时,显然Apache是​​罪魁祸首(有150个进程打开),并且我关掉了Apache,所以我能够工作。

看着错误日志,我发现这一点

[Tue Jul 26 11:55:33 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting [Tue Jul 26 12:49:56 2011] [warn] child process 4814 still did not exit, sending a SIGTERM [Tue Jul 26 12:49:58 2011] [warn] child process 4814 still did not exit, sending a SIGTERM [Tue Jul 26 12:50:00 2011] [warn] child process 4814 still did not exit, sending a SIGTERM [Tue Jul 26 12:50:02 2011] [error] child process 4814 still did not exit, sending a SIGKILL [Tue Jul 26 12:50:03 2011] [error] could not make child process 4814 exit, attempting to continue anyway 

这些错误出现在大约150个不同的PID中(我只是将这些错误提取出来用于确定)。

我有以下的mods启用

 alias.conf authz_default.load autoindex.conf deflate.load mime.conf php5.conf rewrite.load ssl.load alias.load authz_groupfile.load autoindex.load dir.conf mime.load php5.load setenvif.conf status.conf auth_basic.load authz_host.load cgi.load dir.load negotiation.conf reqtimeout.conf setenvif.load status.load authn_file.load authz_user.load deflate.conf env.load negotiation.load reqtimeout.load ssl.conf 

我显然不想重复这个问题,并想知道发生了什么,以及如何预防。

编辑:发生问题的时间周围,访问日志显示请求相对较轻(一个请求或每隔几秒钟2),即使如此,请求是非常轻量级的。

降低您的MaxClients设置。 你可能要花费更多的Apache进程,而不是物理内存。 一旦用完了物理内存,当您将内容填充到虚拟内存时,您将开始深入交换并翻动您的磁盘。 这是一个死亡螺旋。

我有一个虚拟机服务大约100个站点,相当轻的stream量,大约10G /天吞吐量。 与这些设置:

 <IfModule prefork.c> StartServers 2 MinSpareServers 4 MaxSpareServers 8 ServerLimit 75 MaxClients 75 MaxRequestsPerChild 1000 </IfModule> 

嘘声相当不错的4G内存限制使用约2G内存 – 所以是的,检查你的maxclients&发布你的apacheconfig以及

-Sean

-Sean

如果一个进程没有响应SIGKILL ,正如错误日志中的条目所指出的那样,那么会出现一些非常奇怪的事情 – 这是一种不间断的等待。 在你的问题中没有足够的信息来开始诊断原因是什么,但是我会研究磁盘I / O相关的硬件故障,如果你使用的是NFS,确保你正在运行intr安装选项(在2.6.25之前的内核上)。