Cuando ejecuto el siguiente comando para obtener el uso de la CPU, obtengo un buen uso de la CPU del usuario.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Salida:
14.5
Aquí tengo un problema es que la salida depende del comando superior, por lo que no cambia instantáneamente como comando superior. Por lo tanto, no obtengo la CPU correcta al instante. Da la misma salida y no cambia.
Quiero obtener cpuusage en tiempo real en la salida. Por favor, ayúdame a mejorar mi comando.
command-line
cpu
Ketan Patel
fuente
fuente
time
. En mi sistema solo toma 0.165s.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Respuestas:
Tienes razón,
top
parece dar un uso incorrecto de la CPU en la primera iteración. Puede solucionar este problema de la siguiente manera:Por supuesto, esto tomará el doble de tiempo, pero funcionará de todos modos.
Si todavía quiere que funcione más rápido, puede usar la
-d
opción, por ejemplo, para un período de medición total de 1 segundo, use la mitad:fuente
Técnicamente, el primero
top
no siempre genera el mismo valor; solo genera la carga promedio de la CPU desde el último arranque. Debido a quetop
usa el delta de/proc/stat
estadísticas para calcular la carga de la CPU, el primer valor se calcula al compararlo con cero, dando un resultado incorrecto (pero WAD).Si no desea usar
top
, puede analizar directamente/proc/stat
:También es más rápido y más preciso de esta manera.
Puedes probarlo con
stress
:Y hacer
después.
fuente
watch
se puede ejecutar en él:watch -n1 "bash ./cpu"
/proc/stat
es bastante bueno, pero parece tener el mismo inconveniente que la primera iteración de top: genera la carga promedio de CPU desde el último arranque, no la actual.Solo para ampliar la respuesta de @ Ruslan,
top
divide el uso de la CPU entre el usuario, los procesos del sistema y losnice
procesos, queremos la suma de los tres. Por lo tanto, podemos ejecutartop
enb
modo atch que nos permite analizar su salida. Sin embargo, como se explica aquí , la primera iteración detop -b
devuelve los porcentajes desde el arranque, por lo tanto, necesitamos al menos dos iteraciones (-n 2
) para obtener el porcentaje actual. Para acelerar las cosas, puede configurar eld
elay entre iteraciones para0.01
:fuente
Tal vez use este basado en la
ps
salida:fuente
Use el comando watch o para loop in shell,
es decir
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
fuente
¿Por qué te importa el uso de la CPU? El promedio de carga es un indicador mucho mejor:
Si realmente necesita el uso de la CPU, el análisis
/proc/stat
probablemente sea el camino a seguir.fuente
/proc/stat
no da el uso de la CPU como es, uno tiene que leerlo dos veces con un tiempo entre lecturas y hacer algunos cálculos para obtener el uso de la CPU. Esto es justo lo quetop
hace.Usando el
sar
comandoEso significa: obtener 10 veces el resultado en cada segundo
fuente