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 el uso de CPU en tiempo real en la salida. Por favor, ayúdame a mejorar mi comando.
command-line
top
Ketan Patel
fuente
fuente

Respuestas:
Si puede permitirse un retraso de un segundo, esto imprimirá el uso de la CPU como un porcentaje simple:
(Sin el retraso de un segundo,
vmstatsolo puede imprimir valores promedio desde el arranque).fuente
vmstat 1 2así: de loecho $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]contrario,vmstatva a dar valores desde el arranque, que probablemente no sea lo que busca.Este es un problema conocido con
top. 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 en0.01.topdivide el uso de la CPU entre el usuario, los procesos del sistema y losniceprocesos, queremos la suma de los tres. Finalmente, ustedgrepusa la línea que contiene los porcentajes de CPU y luego la usagawkpara sumar usuarios, sistemas y procesos agradables:fuente
topinformará el porcentaje de uso como un porcentaje de una sola CPU. Esto significa que a menudo obtendrá porcentajes mucho más altos. Ver punto 9 aquí .topen modo interactivo (simplemente ejecutartop) y, una vez allí, presionarI(shift + i) para ver un desglose por núcleos.He intentado de varias maneras, pero me parece la más precisa:
Lo tengo desde aqui
fuente
%.1fque, en mi opinión, es más legible y útil para los humanos si usa esa salida en otros scripts.Uso
-n2. Esto generará dos líneas. La primera vez quetopimprime la línea no califica para el estado en ese momento. Luego ajuste su script para ignorar la primera línea.fuente