每隔一段时间,我的网络服务器就会显着变慢,似乎被锁定了。无法通过 SSH 登录,没有提供任何站点。这是一个 VPS,最初是 Debian 5,我升级到测试(挤压)。这是一个典型的 LAMP 设置,其唯一目的是运行几个 wordpress 站点。有一次它被锁定时,我到了其中一个站点,但是 wordpress 抱怨它无法建立数据库连接。所以看起来好像有什么东西真的在消耗 CPU 并且 mysqld 要么超时,要么可能失败并且无法重新启动。但由于我无法通过 SSH 登录,我更倾向于将其归因于 CPU。但是除了操作系统和内核的东西之外,现在唯一运行的进程:
- 阿帕奇
- mysqld
- python(用于fail2ban)
- sshd
- exim4
它有 512M 的 RAM 和 1.5 GB 的交换空间。每次我检查它时,它都有大量可用内存并且几乎不使用交换(通常为 2-3M)。而且由于我正在运行fail2ban,所以我认为我不会受到影响。
今天早上我确实在我的 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 进入并重新启动 VM,并且一切看起来都很好。
有人知道我应该开始研究哪些日志来找到问题的核心吗?
多谢你们。
消息很清楚。系统内存和交换空间不足,因此内核正在终止试图释放内存的进程。您应该在 /var/logs 的日志文件中看到 OOM 消息。
下一步是查找正在使用内存的进程。我发现被杀死的进程通常不是占用内存的进程。为此,您需要设置某种形式的监控。
另一种方法是安装一些类似ps-watcher的东西来杀死占用过多 RAM 的进程。然后,您可以检查 ps-watcher 最常杀死哪个进程的日志,以确定罪魁祸首。