¿Cuáles son los métodos disponibles para obtener el uso de la CPU en la línea de comandos de Linux? [cerrado]

12

Sabemos que topes un comando para obtener el uso de la CPU en Linux y otras formas incluyen cat /proc/statcuál es utilizado por top.

¿Cuáles son otros métodos para obtener el uso de la CPU en la línea de comandos de Linux?

Escenario de caso de uso: la salida de este comando será utilizada por un script para registrar el uso de la CPU continuamente. topy /proc/statdar un uso detallado que es difícil de registrar. ¿Hay alguna manera más fácil de obtener la información de la CPU?

fasil
fuente
3
¿Qué hay de malo con los que cita?
pataluc
@pataluc Da información más detallada. Necesito un ejemplo de la CPU en general el uso de CPU utilizada: 91% Mem Usado 78% MEM libre: 22% o menos así ..
Fasil
vea la respuesta de Nathan ... puede obtener sedel resultado si solo desea el valor.
pataluc
Votación para cerrar como "no constructivo". De superuser.com/help/dont-ask : " Para evitar que su pregunta sea marcada y posiblemente eliminada, evite hacer preguntas subjetivas donde ... su respuesta se proporciona junto con la pregunta, y espera más respuestas: 'Uso ______ para ______ , ¿Que usas?' "
bwDraco
3
@DragonLord en realidad, hay formas bastante limitadas de hacerlo y las dos respuestas aquí son de hecho útiles. El mío señala un error muy común topy el otro da un comando muy útil. No es un uso de X, ¿qué hay de ti? pregunta, pero una pregunta ¿Cómo hago X ? Votación para reabrir.
terdon

Respuestas:

14

Como otros han dicho, la mejor manera es probablemente top. Necesita un pequeño ajuste y un poco de análisis, pero puede obtenerlo para darle el uso actual de la CPU como porcentaje.

topdivide el uso de la CPU entre el usuario, los procesos del sistema y los niceprocesos, queremos la suma de los tres. Por lo tanto, podemos ejecutar topen bmodo atch que nos permite analizar su salida. Sin embargo, como se explica aquí , la primera iteración de top -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 el delay entre iteraciones en 0.01. Finalmente, usted grepusa la línea que contiene los porcentajes de CPU y luego la usa gawkpara sumar usuarios, sistemas y procesos agradables:

    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 ps -o pcpu axagregando 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 topes diferente a la mía y debería 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, configure 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}'
terdon
fuente
Eliminé mi respuesta porque lo que dijiste es correcto. Este parece ser un método válido.
Nathan C
@NathanC Pensé que tu respuesta también era correcta, era lo que habría respondido. Luego lo probé y me sorprendió :).
terdon
@terdon Gracias por su respuesta detallada ... No pude obtener la salida para el comando anterior. ¿Se requiere alguna modificación sintáctica?
2013
@fasil no, debería funcionar. ¿Cuál es el problema? ¿Algún mensaje de error?
terdon
@terdon No obtengo ningún resultado para el comando completo ... con #top -bn 2 -d 0.01 obtengo el resultado completo pero al agregar grep '^% Cpu' no veo ningún resultado, solo las indicaciones devuelven no error ...
fasil
9

sarEs la forma definitiva de hacerlo. Entonces, por ejemplo, sar -ugenerará 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 sysstatpaquete, 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

Reunirá estadísticas cada 60 segundos 600 veces, por lo que 600 minutos.

Philip Kearns
fuente
1
Probablemente deberías decirlo diferente. La línea que publicó medirá cada 60 segundos, 600 veces. La forma en que leí tu publicación fue que el 600 es una duración, por lo que si pongo 30 600, tomaría cada 30 segundos durante 600 minutos, sin embargo, en realidad tomaría uno cada 30 segundos 600 veces.
James McDonnell