Para monitorear el uso de la CPU en un servidor AIX, estoy usando el siguiente script que se ejecuta 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
Sin embargo, en caso de que el uso de la CPU sea superior al 90%, necesito enumerar los 5 procesos principales que utilizan la CPU.
¿Cómo logro esto?
Respuesta1
Puede enumerar los 5 primeros de una manera bastante legible limitando las columnas, ordenándolas primero con el mayor uso de CPU y luego truncando a las primeras 5 (usando head -6
, ya que también queremos incluir los encabezados):
ps -eo pcpu,pid,args | sort -k 1 -r | head -6
La salida se parece a esto:
%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]
Es posible que también desee examinar top
el modo por lotes de GNU ( -b
).
Respuesta2
Para una inmersión profunda, el mejor curso de acción aquí es correr
tprof -skex sleep 10
que le brindará un informe que detalla los procesos que utilizan una gran cantidad de CPU y luego profundizará en el uso por función y bibliotecas compartidas.
Respuesta3
puedes usar el siguiente comando, coincidirá con la salida de topas
ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15