100%的CPU阻止我login到机器

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

我确定这是一个错误,或者是服务器上的错误configuration,但是当实例进入这个状态时,我不能通过SSHlogin进行任何调查。 不幸的是,亚马逊并没有提供通过控制台访问实例的方法。

所以,我想我的问题是 – 有没有办法configuration机器,以便在任何100%的CPU情况下,我们优先考虑SSH以允许rootlogin和调查?

或者至less,有什么简单的方法来自动杀死任何进程/进程发生这种情况?

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

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

您可以尝试修改sshd init脚本以启动一个好的值-5或-10。 这将改变所有SSHlogin的价值,这可能是适合你的。

在这种情况下,我知道没有办法以特殊的方式处理sshlogin,但是你应该检查你的cronjobs和日志文件。 特别是系统日志,它应该logging任何cronjob开始,看看这是否有关你的问题。 那么你应该能够找出你的问题的原因。 可能它甚至是一个内核bug,也可能被logging在系统日志中。

一个简单的事情就是logging所有进程的CPU使用情况。 像这样的东西:

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

这将不断loggingtop的输出到top.log 。 redirect在那里,因为有时候我发现在SSH会话中启动的后台工作问题没有STDOUT,STDERR和STDIN都与某些东西有关。

无论如何,在下一次重新启动之后,您可以只读取该日志的底部,看看哪些进程正在锤击CPU。

以上将会产生相当多的输出。 你可以改为每5秒写出一次,如下所示:

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

感觉就像有一个叉形炸弹在某个耗尽PID空间的地方。 Linux为root保留了一些进程/内存的使用,但这需要

  • 以root身份从控制台手动login
  • 杀死 – 停止行为不当(如果kill -9其他进程将重新占用插槽)

因为你无法login,所以我build议设置ulimits到内存的使用,打开文件的数量等等。