杀死过程如果高负荷平均

不久前,我的服务器上的洛杉矶提高到400,我甚至不能使用SSHlogin到服务器。 是否存在任何软件,可以通过自动杀死在服务器上造成巨大负担的进程来防止这种情况?

PS。 Debian 6.0.5

您可以使用像Monit这样的监视程序来监视您关心的进程,并在它们消耗过多的资源时重新启动它们。

像这样的东西会被用来监控Apache:

check process apache with pidfile /var/run/httpd.pid start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd stop" if cpu > 40% for 2 cycles then alert if totalcpu > 60% for 2 cycles then alert if totalcpu > 80% for 5 cycles then restart if mem > 100 MB for 5 cycles then stop if loadavg(5min) greater than 10.0 for 8 cycles then stop 

因此,如果Apache进程或其任何subprocess的cpu%超过40%,请发送警报。 如果它高于80%,请重新启动Apache。

如果由于某种原因,Monit也会启动Apache,这是保持关键服务(如果没有像Upstart一样可用)的合理方式。

这假定您有一组您可以针对此类监控的进程。 据推测,你怀疑一个特定的应用程序可能是一个问题。

当您的洛杉矶提升并且无法通过sshlogin时,请尝试使用Grey Goo,这是一款微型可用且可靠的远程命令执行服务器和客户端,专为紧急情况devise:

https://code.google.com/p/greygoo/

负载是处理剩余运行任务的总计值。

这是在每个进程被给予CPU的公平时间片之后剩下的剩余处理的度量。 实际上,它提出了一个系统如何处理进程间资源竞争的问题。

IOWait也可以增加负载,如果进程造成较大的IO使用,这将指向一个内存问题(使用太多,积极交换)或底层的I / O问题。 如果只是一个使用了大量I / O的进程,通常会受到惩罚,而不会影响其他进程。

我不认为你可以简单地杀死一个进程来解决这个问题,因为这个问题源于CPU上的一些进程需求。 尽pipe你可以为一个特定的进程终止进程组或线程池。

这是一个简单的bash脚本,如果系统负载高于某个限制,可以终止一个进程。

在这个例子中,如果负载高于2.5,脚本将杀死“named”进程。

如果负载下降到低于这个水平,那么它会检查named是否正在运行,并在需要时启动它。

 #!/bin/bash NOTIFY="2.5" TRUE="1" FTEXT='load average:' LOAD5MIN="$(uptime | awk -F "$FTEXT" '{ print $2 }' | cut -d, -f2 | sed 's/ //g')" RESULT=$(echo "$LOAD5MIN > $NOTIFY" | bc) if [ "$RESULT" == "$TRUE" ]; then echo "High load" killall -9 named else pgrep named || /etc/init.d/bind9 start 1>/dev/null 2>/dev/null fi