Para monitorar o uso da CPU em um servidor AIX estou usando o seguinte script que é executado a cada 10 minutos.
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
Porém, caso o uso da CPU esteja acima de 90%, preciso listar os 5 principais processos que estão usando a CPU.
Como faço para conseguir isso?
Responder1
Você pode listar os 5 primeiros de uma forma bastante legível, limitando as colunas, classificando-as primeiro com o maior uso de CPU e depois truncando para os 5 primeiros (usando head -6
, já que também queremos incluir os cabeçalhos):
ps -eo pcpu,pid,args | sort -k 1 -r | head -6
A saída é mais ou menos assim:
%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]
Você também pode querer dar uma olhada no top
modo batch do GNU ( -b
).
Responder2
Para um mergulho profundo, o melhor curso de ação aqui é correr
tprof -skex sleep 10
que fornecerá um relatório detalhando os processos que usam alta CPU e, em seguida, detalhará o uso por função e bibliotecas compartilhadas.
Responder3
você pode usar o comando abaixo, ele corresponderá à saída do topas
ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15