系统运行的是 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,请确保您使用的是intr
mount 选项(无论如何,在 2.6.25 之前的内核上)。