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,
topparece 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
-dopción, por ejemplo, para un período de medición total de 1 segundo, use la mitad:fuente
Técnicamente, el primero
topno siempre genera el mismo valor; solo genera la carga promedio de la CPU desde el último arranque. Debido a quetopusa el delta de/proc/statestadí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
watchse puede ejecutar en él:watch -n1 "bash ./cpu"/proc/states 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,
topdivide el uso de la CPU entre el usuario, los procesos del sistema y losniceprocesos, queremos la suma de los tres. Por lo tanto, podemos ejecutartopenbmodo atch que nos permite analizar su salida. Sin embargo, como se explica aquí , la primera iteración detop -bdevuelve 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 eldelay entre iteraciones para0.01:fuente
Tal vez use este basado en la
pssalida: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/statprobablemente sea el camino a seguir.fuente
/proc/statno 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 quetophace.Usando el
sarcomandoEso significa: obtener 10 veces el resultado en cada segundo
fuente