Привет всем. Проблема в следующем. На компьютере запущено 10 процессов. Время от времени один из них может подвиснуть. Если посмотреть top то столбик %CPU = 100
Такой зависший процесс дает лаг на работу остальных 9ти. Поэтому нужно обнаруживать его и убивать. Авторестарт у них свой, стартуют нормально.
Нашел вот такой скрипт, но не срабатывает как нужно. Может кто подскажет.
Показать
#!/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=400
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
else
echo
echo no run-aways.
echo load average is at $CPU_LOAD
echo
echo Active processes...
ps aux r
fi
exit 0
Вроде процессы он находит нормально, но думаю определяет загрузку по не понятному мне алгоритму. Мне нужно чтобы если процессор в top = 95-100% скрипт его убивал.
Для теста пробовал запустить процесс. В top у него показывает 50% а скрипт выдает 16%
Active processes...
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4965 16.0 0.8 317084 116304 pts/0 Rl+ 15:37 8:31 ./server_shell
root 9718 0.0 0.0 4684 960 pts/2 R+ 16:30 0:00 ps aux r
тут привязка к кол-ву ядер идет на сколько я могу судить. На компе у меня corei5 т.е. 4 полных ядра или 8 общих. Убить его этим скриптом могу только если поставить
CPU_THRESHOLD=10
но 10 чего тут? Потому что если выставить допустим 20 и подловить момент когда скрипт покажет
root 4965 26.0 0.8 317084 116304 pts/0 Rl+ 15:37 8:31 ./server_shell
процесс не убивается, продолжает работать...
Помогите разобраться :)