Como han dicho otros, la mejor manera es probablemente top
. Necesita algunos ajustes y un poco de análisis, pero puede obtenerlo para obtener el uso actual de la CPU como un porcentaje.
top
divide el uso de la CPU entre el usuario, los procesos del sistema y nice
procesos, queremos la suma de los tres. Entonces, podemos ejecutar top
en b
modo de captura que nos permite analizar su salida. Sin embargo, como se explica aquí, la primera iteración de top -b
devuelve los porcentajes desde el arranque, por lo que necesitamos al menos dos iteraciones (-n 2
) para obtener el porcentaje actual. Para acelerar las cosas, puede configurar el d
retraso entre iteraciones a 0.01
. Finalmente, grep
la línea que contiene los porcentajes de CPU y luego use gawk
para sumar procesos de usuario, sistema y Niza:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Pensé que también podría obtener esta información a través de ps -o pcpu ax
agregando el % de uso de cada proceso en ejecución. Desafortunadamente, como se explica aquí, ps
"devuelve el porcentaje de tiempo dedicado a la ejecución durante toda la vida útil de un proceso", que no es lo que necesita.
EDITAR
Según su comentario, su versión de top
es diferente al mío y deberías usar esto en su lugar:
top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Y, para evitar problemas con la localización, establezca la configuración regional en C:
LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
sar
es la forma definitiva de hacerlo. Entonces, por ejemplo, sar -u
generará algo como esto:
08:30:01 AM CPU %user %nice %system %iowait %idle
08:40:01 AM all 6.94 0.00 1.77 4.92 86.36
08:50:01 AM all 5.73 0.00 2.31 12.72 79.24
09:00:01 AM all 5.95 0.00 2.58 18.36 73.11
09:10:01 AM all 6.88 0.00 2.22 17.44 73.45
09:20:01 AM all 8.61 0.00 2.68 27.93 60.78
No dice qué Linux usa, pero para CentOS/RedHat necesita instalar el sysstat
paquete, y creo que es lo mismo en Debian/Ubuntu.
También puede usar sar para recopilar estadísticas ad hoc :
sar -o /tmp/sar.out 60 600
Recopilará estadísticas cada 60 segundos 600 veces, es decir, 600 minutos.