如何解决 Web 服务器锁定问题(Debian Squeeze)

如何解决 Web 服务器锁定问题(Debian Squeeze)

每隔一段时间,我的 Web 服务器就会变得非常慢,好像被锁定了一样。无法通过 SSH 连接,无法访问任何网站。这是一个 VPS,最初是 Debian 5,我将其升级到测试版(squeeze)。这是一个典型的 LAMP 设置,唯一目的是运行几个 wordpress 网站。有一次它锁定了,我进入了其中一个网站,但 wordpress 抱怨它无法建立数据库连接。所以看起来好像有什么东西真的在消耗 CPU,mysqld 要么超时,要么可能失败了,无法重新启动。但由于我无法通过 SSH 连接,我更倾向于将其归因于 CPU。但现在除了操作系统和内核之外,唯一正在运行的进程是:

  • 阿帕奇
  • mysqld
  • python(用于 fail2ban)
  • sshd
  • exim4

它有 512M 的 RAM 和 1.5 GB 的交换空间。每次我检查它时,它都有足够的可用内存,并且几乎不使用交换空间(通常为 2-3M)。而且由于我正在运行 fail2ban,所以我不认为我受到了 ddos​​ 攻击。

我今天早上在我的 logwatch 电子邮件中发现了这一点(它昨晚很晚才锁定,当时流量很小):

6 Time(s):  [<ffffffff810a0ebc>] ? oom_kill_process+0x7e/0x23d
6 Time(s):  [<ffffffff810a1505>] ? __out_of_memory+0x12a/0x141
6 Time(s):  [<ffffffff810a1586>] ? out_of_memory+0x6a/0x94

我没有发现其他可疑的东西。它不可能是我提供商的主机,因为我可以通过 SSH 进入并重新启动虚拟机,一切似乎都很好。

有人知道我应该开始仔细研究哪些日志才能找到问题的核心吗?

多谢你们。

答案1

这些消息非常清楚。系统内存和交换空间不足,因此内核正在终止试图释放内存的进程。您应该会在 /var/logs 中的日志文件中看到 OOM 消息。

下一步是找到占用内存的进程。我发现被杀死的进程通常不是占用内存的进程。为此,您需要设置某种形式的监控。

另一种方法是安装类似的东西ps-观察者杀死占用过多 RAM 的进程。然后,您可以检查日志,了解 ps-watcher 最常杀死的进程,以确定罪魁祸首。

相关内容