Apache 在夜间随机停止,且日志中没有错误

Apache 在夜间随机停止,且日志中没有错误

我在 AWS 上有一个服务器,多年来一直很稳定。它在 Ubuntu 12.04.5 LTS 上运行 Apache 2.2.22。我每月都会定期运行安全更新。

最近,Apache 在午夜左右停止处理请求,有时在凌晨晚些时候(中部时间凌晨 2-4 点)停止处理请求。对我们来说,这是一个使用率较低的时期,但我们仍然有稳定的请求流。我们的白天活动要多得多,而且白天从未出现过下降(至少到目前为止)。到目前为止,它总是在大约 10 分钟后恢复正常,早上总是恢复正常。由于问题发生的时间,我不怀疑它与 MaxClients 有关,正如其他几个帖子所暗示的那样。

我在任何 apache 错误日志(我们有大约 10 个虚拟主机)中都看不到任何内容,dmesg 和 syslog 中也没有看到任何内容。事实上,我今天早上阅读了 /var/log 中的每个日志。在出现问题时,我没有看到任何事件发生。

由于站点监控通知,我能够在它关闭时捕获它。在此期间,我可以验证 apache 没有处理请求。不过我可以进入服务器。我怀疑是网络问题,但奇怪的是,一个端口正常,另一个端口不正常。我已经能够确认 apache 不会在该服务器上处理来自本地主机的请求。所以,这似乎不是硬件问题。

重新启动 Apache 服务确实可以让网站恢复,但只能持续几分钟。当它关闭时,我正在跟踪实时日志,但仍然没有任何结果。问题发生时,任何日志中都没有显示任何内容。重新启动似乎总能解决问题(至少持续 24 小时,有时甚至更久)。

亚马逊支持人员认为服务器没有任何问题。我怀疑 Apache 出现故障,服务重启不彻底。或者,操作系统的内核/网络级​​别出现了问题。而且,这种情况总是在 CPU 负载较低时发生。内存看起来没问题。没有发生任何“常见问题”。它只是默默地停止工作。

由于我缺乏来自服务器的信息,我不知道还要寻找什么。我倾向于下周重建服务器,但真的很想弄清楚这一点。

也许在问题发生期间我应该查看其他内容。另外,如果我“找到”任何日志以获取更多信息,请告诉我。目前我没有可以发布的有用日志。这整件事对我来说似乎很疯狂,因为我习惯以某种方式记录故障,尤其是如果它是 apache 或内核(我们是老朋友了)。

答案1

我建议下次启动它时,启动 strace 运行,以便在它死机后,您可以调查在它失败之前最后发生的调用。启动后,您可以使用以下命令确保连接到主进程及其所有子进程以及任何分叉的新进程。

pidlist=''; for pid in `ps ax | grep httpd | awk '{print $1}'`; do pidlist="$pidlist -p $pid"; done; strace -tt -F -f $pidlist 2>&1 |tee /root/apache_strace.out

我不知道在你的发行版中 Apache 进程是否被称为 httpd 或其他名称(例如 apache 或 apache2),但如果不是 httpd,则将正确的名称替换到上面的命令中。

相关内容