Apache 导致整个系统无响应

Apache 导致整个系统无响应

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

今天我发现服务器反应非常迟钝(登录 SSH 需要 5 分钟以上)。查看系统资源后,很明显 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 中(我只是为了清楚起见把它们拉出来)。

我启用了以下模块

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

我显然不希望这个问题重演,并希望了解到底发生了什么,以及如何防止它发生。

编辑:在问题发生时,访问日志显示请求相对较轻(每隔几秒一个或两个请求),即使在那时请求也非常轻。

答案1

降低 MaxClients 设置。您可能启动了比物理内存更多的 Apache 进程。一旦物理内存用完,您就会开始使用交换空间,并在将内容分页到虚拟内存时损坏磁盘。这是一个死亡螺旋。

答案2

我有一台虚拟机,服务大约 100 个站点,流量相当小,吞吐量大约为 10G/天。使用以下设置:

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

在 4G 内存限制下运行良好,使用大约 2G 内存 - 所以,检查你的 maxclients 并发布你的 apacheconfig

-肖恩

-肖恩

答案3

如果某个进程没有响应SIGKILL,如错误日志中的条目所示,那么肯定存在问题极其奇怪的事情发生了——它处于某种不可中断的等待状态。您的问题中的信息不足以诊断出原因,但我会调查与磁盘 I/O 相关的硬件故障,如果您使用的是 NFS,请确保您使用的是intrmount 选项(无论如何,在 2.6.25 之前的内核上)。

相关内容