¿Cómo puedo recibir estadísticas de CPU superiores desde el shell?

12

Estoy tratando de obtener una lectura precisa de mi CPU usada (en porcentaje) de top. Este es el comando que estoy ejecutando para probar:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Esto devuelve:

10.7%us,

Cuál es la pieza de datos adecuada que quiero. Sin embargo, cada vez que ejecuto el comando obtengo el mismo resultado, aunque estoy aplicando diferentes cargas en mi sistema (y sin mencionar que htopme dice que mi uso es diferente). Parece que cada vez que comienzo top, el uso de mi CPU es el mismo. Solo después de un par de cuadros me da los valores adecuados.

No parece que pueda analizar la salida de top de esta manera, así que estoy buscando otras aplicaciones confiables que me den una lectura precisa del shell. Realmente me gusta cómo htoppuede darme una lectura por núcleo.

Lo he intentado iostaty mpstatparece que dan valores inexactos y "lentos para cambiar".

n0pe
fuente
2
No lo hagas La pregunta correcta es: ¿Cómo obtengo estadísticas de uso de CPU de primer nivel desde el shell?
Stéphane Gimenez
@ StéphaneGimenez gracias
Modifiqué

Respuestas:

12

Yo uso este script (de este hilo en los tableros de Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
jasonwryan
fuente
Linux tiene una gran información en / proc / - vea linux.die.net/man/5/proc para conocer todas las ventajas . Solo tenga en cuenta que estos son solo Linux. Realmente no hay una forma multiplataforma para obtener esa información a menos que use una biblioteca como Sigar .
Pat Notz
La idea es buena, pero algunos detalles son incorrectos. El valor inactivo es la quinta columna, y también debe agregar la columna iowait (sexta columna) para obtener un porcentaje razonable. Para ser completamente correcto, también tendría que agregar todos los valores de "descanso", pero a menudo son muy pequeños.
Peter Eisentraut
El valor inactivo es la quinta columna, si está contando la columna "cpu". De lo contrario, es el cuarto.
SunSparc
6

Mira sar , también. Las implementaciones pueden variar ampliamente de nix a nix, pero deberían proporcionarle estadísticas básicas del sistema, en instantáneas dadas. No estoy seguro de cómo precisa los valores están en el punto en que se inicia por primera vez el mando, pero es posible jugar un poco para ver cómo se compara con top, iostat, etc.

El resultado se basa en columnas, como top, por lo que debería poder canalizar el resultado awko cutmanipular los resultados.

tcdyl
fuente
Lo he intentado sarantes con resultados mixtos. Voy a ir con la respuesta de @ jasonwryan aquí porque puedo modificarla fácilmente para representar el uso con mis dos núcleos de CPU.
n0pe
0

Lo que encontré es similar a la persona que hizo la pregunta anterior, al menos en CentOS 6. Si ejecuto top en modo por lotes para solo una iteración, parece reunir la misma cifra, casi como si su tendencia es comenzar con lo que recuerda por última vez la visualización. Parece que Top necesita acumular al menos un par de cifras para obtener deltas y obtener porcentajes correctos. Después de probar más de 10 iteraciones, descubrí que la segunda figura que apareció mostró suficiente diferenciación en cada ejecución. Entonces, es bastante fácil obtener esta línea a través de

top -b -n 2 | grep Cpu | tail -1

Me gusta incorporar esto con tiempo de actividad para la carga y un filtro grep de procesos seleccionados de ps, como las consultas de postgres. Un monitor muy simple se puede expresar con el alias:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
Robert Casey
fuente