CPU 100% 导致我无法登录机器

CPU 100% 导致我无法登录机器

我在 Amazon EC2 上运行了一个 CentOS 5 实例。正常的 CPU 使用率在 10-20% 左右徘徊。然而,在过去一周内,大约有 4 次 CPU 使用率突然飙升至 100%,并且一直保持在 100% 不变,直到重新启动实例。

我确信这是服务器上的一个错误或配置错误,但当实例进入此状态时,我无法通过 SSH 登录进行任何调查。不幸的是,Amazon 没有提供通过控制台访问实例的方法。

所以,我想我的问题是——有没有办法配置机器,以便在任何 100% CPU 情况下,我们优先使用 SSH 以允许 root 登录并调查?

或者至少,当这种情况发生时,有没有什么简单的方法可以自动终止任何进程?

顺便说一下,这是亚马逊上的“C1.xlarge”实例,这意味着它有 8 个核心。

另外,如果有帮助的话,该机器被设置为运行 Plesk 的 Web 服务器。不要告诉我 Plesk 不能在 EC2 中运行,因为几个月来我一直做得很好……直到最近。该机器已经在运行 PLesk 版本的 monit,所以我宁愿不设置第二个 monit。

答案1

您可以尝试修改 sshd init 脚本,以 -5 或 -10 的合理值启动它。这将更改所有 SSH 登录的值,这对您来说可能没问题。

答案2

我不知道在这种情况下如何以特殊方式处理 ssh 登录,但您应该检查您的 cronjobs 和日志文件。特别是系统日志,它应该记录启动的任何 cronjob,并查看这是否与您的问题有关。然后您应该能够确定问题的原因。甚至可能是内核错误,也可能记录在系统日志中。

答案3

一个简单的方法是记录所有进程的 CPU 使用率。如下所示:

top -l 0 > top.log 2>&1 </dev/null &

这将持续将 的输出记录toptop.log。之所以有重定向,是因为有时我注意到在 SSH 会话中启动的后台作业存在问题,这些作业没有将 STDOUT、STDERR 和 STDIN 全部绑定到某个东西。

无论如何,在您下次重新启动后,您只需阅读该日志的底部并查看哪些进程正在消耗 CPU。

上面的代码会产生大量的输出。你可以让它每 5 秒输出一次,如下所示:

top -l 0 -s 5 > top.log 2>&1 </dev/null &

答案4

黑客可能已经控制了你的机器...检查 auth.log 中是否有可疑的登录,并希望他们没有获得 root 权限。检查进程列表中是否有奇怪的东西。

相关内容