我安装了一个名为的程序,earlyoom
当我的 RAM 和交换空间几乎已满时,它会终止最耗费 RAM 的程序。但是,我发现我的笔记本电脑不断死机,因为所有四个虚拟核心(2 个核心具有超线程)的 CPU 使用率都达到 100%。当 CPU 达到 100% 时,是否有任何程序或脚本可以终止最耗费 CPU 的程序?
答案1
我发现这个似乎可以满足您的需求。我还没有测试过……您应该能够根据自己的目的进行调整。当然,不加区分地自动终止随机进程可能是不明智的。
#!/bin/bash
## Note: will kill the top-most process if the $CPU_LOAD is greater than the $CPU_THRESHOLD.
echo
echo checking for run-away process ...
CPU_LOAD=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
CPU_THRESHOLD=300
PROCESS=$(ps aux r)
TOPPROCESS=$(ps -eo pid -eo pcpu -eo command | sort -k 2 -r | grep -v PID | head -n 1)
if [ $CPU_LOAD -gt $CPU_THRESHOLD ] ; then
# kill -9 $(ps -eo pid | sort -k 1 -r | grep -v PID | head -n 1) #original
# kill -9 $(ps -eo pcpu | sort -k 1 -r | grep -v %CPU | head -n 1)
kill -9 $TOPPROCESS
echo system overloading!
echo Top-most process killed $TOPPROCESS
echo load average is at $CPU_LOAD
echo
echo Active processes...
ps aux r
# send an email using mail
SUBJECT="Runaway Process Report"
# Email To ?
EMAIL="[email protected]"
# Email text/message
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "System overloading, possible runaway process."> $EMAILMESSAGE
echo "Top-most process killed $TOPPROCESS" >>$EMAILMESSAGE
echo "Load average was at $CPU_LOAD" >>$EMAILMESSAGE
echo "Active processes..." >>$EMAILMESSAGE
echo "$PROCESS" >>$EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
else
echo
echo no run-aways.
echo load average is at $CPU_LOAD
echo
echo Active processes...
ps aux r
fi
exit 0