Для мониторинга загрузки ЦП на сервере AIX я использую следующий скрипт, который выполняется каждые 10 минут.
lparstat 2 10 > cpu
usage=$(tail -10 cpu | awk 'BEGIN {sum=0;} {sum+=$4} END{print int(100-sum/10)}')
if [[ $usage -ge 90 ]]; then
# mail the error and cpu file to admin
# displaying this for testing purposes
echo "CPU usage off the charts!!!"
cat cpu
fi
Однако в случае, если загрузка ЦП превышает 90%, мне необходимо составить список 5 основных процессов, использующих ЦП.
Как этого добиться?
решение1
Вы можете составить список из 5 лучших в достаточно удобном для чтения виде, ограничив количество столбцов, отсортировав их сначала по наибольшей загрузке ЦП, а затем усекая до первых 5 (используя head -6
, поскольку мы также хотим включить заголовки):
ps -eo pcpu,pid,args | sort -k 1 -r | head -6
Вывод выглядит примерно так:
%CPU PID COMMAND
2.0 30531 -bash
0.0 30673 head -6
0.0 30672 sort -k 1 -r
0.0 30671 ps -eo pcpu,pid,args
0.0 30670 [flush-253:0]
Возможно, вам также захочется рассмотреть top
пакетный режим GNU ( -b
).
решение2
Для глубокого погружения лучшим вариантом будет бег.
tprof -skex sleep 10
который предоставит вам подробный отчет о процессах, использующих высокую загрузку ЦП, а затем углубится в использование по функциям и общим библиотекам.
решение3
Вы можете использовать команду ниже, она будет соответствовать выводу topas
ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15