昨天我的网站短暂瘫痪。我登录服务器后,我的第一反应是重新启动 Apache Web 服务器。之后一切正常。因此我开始检查 ganglia 指标以查看发生了什么。很明显,在我重新启动 Apache 前一分钟,对 Web 服务器的请求数量非常高,超出了 Apache 的限制并阻止了其他请求。
我手动检查了 Apache 日志,过滤了重启前后几分钟的流量。没有任何异常迹象。我还使用一些工具(awstats、bots 脚本等)分析了日志,结果类似。我对错误日志也做了同样的处理,仔细检查了一些奇怪的行为。没有成功。
所以我很确定问题是由于对 Apache Web 服务器的请求突然增加。但我不知道这是怎么发生的,这是一次攻击、一些严重的错误、应用程序问题还是其他我不知道的问题。如果您的 Web 服务器发生类似情况,您会怎么做?您还使用哪些工具?您还检查了哪些日志?将重新启动 Web 服务器作为解决问题的第一步措施是否错误?
答案1
回复:首先重新启动服务器……“这取决于”的另一个绝佳例子:-)
如果这是一个必须启动的服务器系统,我想我不会先重新启动它。
我会查看日志,也许在 apache 日志上使用 tail -f 来查看实时发生的情况。
我可能还会打开另一个窗口并通过 wireshark 检查是否有任何可疑的东西,只是为了看看哪些流量正在进入(和离开)系统。
否则,请检查系统负载、驱动器活动、进程列表、网卡活动,以验证其是否与流量有关,而不是与软件有关。检查内存/交换使用情况。检查 Apache 进程的数量,看看它们是否已达到最大值。
大多数情况下,重启并不是必要的,虽然它能解决问题,但显然并不能解决问题造成问题意味着您可能会接到另一个电话(可能在更不方便的时候)要求您赶紧再次修复。任何服务器都不应该通过定期的计划外重启来维护。
当压力很大时,重启可能是让上级或用户不再纠缠你的一种方法,但另一方面,你可能失去了弄清楚到底出了什么问题的机会。除非是端口扫描或 Web 服务器扫描,此时你的服务器“消失”可能意味着攻击会继续进行,否则重启后攻击会突然停止,这很奇怪。
如果系统必须一直处于运行状态,您可能需要考虑某种故障转移和负载平衡解决方案。这也有助于排除故障,并让您更灵活地诊断问题而不会失去连接(尽管您需要有更多自动监控来告诉您系统 A 出现问题,但由于 B,网站仍在运行,这样用户就不会告诉您有问题)。
答案2
我有一个粗略但有点有效的措施,用于表现出类似症状的 Apache Web 服务器。我有一个 cron 作业,每分钟运行一次
curl -s http://localhost/server-status > `date!`
这样,如果 Apache 服务器队列填满了请求(有时会由于未知原因而发生这种情况):Apache 因某些请求而“堵塞”)我记录了请求之前发生的事情。这对于解决高负载问题也很有帮助。