如何诊断高负载下的 Web 服务器锁定

如何诊断高负载下的 Web 服务器锁定

我一直不明白是什么问题会导致服务器因突然的高负载峰值而偶尔挂起。我不是系统管理员(我是 PHP 程序员),但由于官方系统管理员工作不力,所以我被要求自己寻找解决方案。

服务器运行在 Debian Lenny 上,通过 apache 为基于 wordpress + vbulletin 的网站提供服务,每天有 40-60k 次访问。在尽我所能进行应用程序端优化后,我们发现网站运行平稳,甚至几个星期后,突然出现问题,导致服务器负载跳升至 80+。停止 apache 并重新启动会有所帮助,但如果有足够的时间,它通常会自行平静下来。它可能一天“崩溃”两次,也可能几周都没有问题。这似乎完全是随机的。

不过,发生了一件奇怪的事情。有人警告我出现了奇怪的行为,经过检查,我发现文件.htaccess被更改为将来自搜索引擎的流量重定向到某个外部网站。我检查了代码和每个插件(全部是最新的),最后尝试了“困难的方式” 。chown奇怪的是,当出现另一个问题时,我发现该文件又变回了分配给网站虚拟主机的用户的所有权。我知道这不可能仅通过一些网络漏洞来实现,还是我错了?.htaccessroot.root

我如何才能找到这种高负载峰值的原因?除了具有 root 访问权限的人这样做之外,
还有什么可以解释文件更改权限? 这两件事是否与某种攻击有关?root.root

答案1

关于 Apache 问题,一个可能的原因是您的 MaxClient/MaxServer 设置过高。当流量激增时,您会用尽所有 RAM,导致 Apache 开始使用交换空间,这会很快降低您的性能。下次遇到此问题时,请检查 top/free 的输出,看看是否有任何交换空间被使用。如果是,请尝试降低 MaxClient/MaxServer 值。

我还遇到了 Apache 1.3 的问题,有些连接永远无法关闭,几天后 90% 的连接将无所事事,没有客户端来处理传入的新连接。我通过每天重新启动 Apache 解决了这个问题。听起来,您没有足够的流量或问题发生之间的时间,这可能是原因。

答案2

在我看来,好像有人可能已经入侵了您的服务器,这更多的是因为将搜索引擎流量重定向到其他网站,而不是因为文件所有权问题。我担心某些网络漏洞可能会让攻击者获得您系统的 root 访问权限。

我会下载并运行一个 rootkit 检测器,例如Rootkit 猎手。 如果你已经植根,你可能需要找一个有经验的人来帮助你修复它。

答案3

这可能是一种攻击,但为什么只更改文件.htaccess,可能还有更多需要检查的东西。也许 php 脚本正在自动生成该文件。该文件的权限是什么?

至于负载,可能有很多原因,特别是因为它的随机性。查看日志并使用工具(webalizer,查看负载峰值是否与访问高峰期或访问特定资源的时间相吻合,这可能是这种情况。

使用以下方法检查您的服务器chkroot工具和类似工具来检查是否存在漏洞。如果发生这种情况,您可能需要/想要从头开始重新安装服务器。

答案4

在网络服务器运行上# ps -uapache -o wchan=WIDE-WCHAN-COLUMN,cmd尝试找到与flock_lock_file_w /usr/sbin/httpd第一个字段类似的内容。

你的...是session.save_handler

相关内容