每隔一段时间,我的 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 最常杀死的进程,以确定罪魁祸首。