Cpustat: supervisa la utilización de la CPU mediante procesos en ejecución en Linux


Cpustat es un potente programa de medición del rendimiento del sistema para Linux, escrito con el lenguaje de programación Go. Intenta revelar la utilización y saturación de la CPU de una manera eficaz, utilizando el método de saturación y errores de utilización (USE) (una metodología para analizar el rendimiento de cualquier sistema).

Extrae muestras de frecuencia más alta de cada proceso que se ejecuta en el sistema y luego resume estas muestras a una frecuencia más baja. Por ejemplo, puede medir cada proceso cada 200 ms y resumir estas muestras cada 5 segundos, incluidos los valores mínimo/promedio/máximo para ciertas métricas.

Cpustat genera datos de dos formas posibles: una lista de texto puro del intervalo de resumen y un panel de control de desplazamiento colorido de cada muestra.

Cómo instalar Cpustat en Linux

Debe tener Go (GoLang) instalado en su sistema Linux para poder usar cpustat, haga clic en el enlace a continuación para seguir los pasos de instalación de GoLang si no lo tiene instalado:

  1. Instale GoLang (Go Programming Language) en Linux

Una vez que haya instalado Go, escriba el comando go get a continuación para instalarlo, este comando instalará el binario cpustat en su variable GOBIN:

# go get github.com/uber-common/cpustat

Cómo utilizar Cpustat en Linux

Cuando se complete el proceso de instalación, ejecute cpustat de la siguiente manera con privilegios de root usando el comando sudo, es decir, si está controlando el sistema como un usuario no root, de lo contrario obtendrá el error como se muestra:

$ $GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.

Nota: Para ejecutar cpustat y todos los demás programas de Go que haya instalado en su sistema como cualquier otro comando, incluya la variable GOBIN en su variable de entorno PATH. Abra el enlace a continuación para aprender cómo configurar la variable PATH en Linux.

  1. Aprenda a configurar sus variables $PATH de forma permanente en Linux

Así es como funciona cpustat; se consulta el directorio /proc para obtener la lista actual de ID de proceso para cada intervalo, y:

  • para cada PID, lea/proc/pid/stat, luego calcule la diferencia de la muestra anterior.
  • en caso de que sea un PID nuevo, lea/proc/pid/cmdline.
  • para cada PID, envíe un mensaje de enlace de red para obtener las estadísticas de la tarea, calcule la diferencia de la muestra anterior.
  • fetch/proc/stat para obtener las estadísticas generales del sistema.

Nuevamente, cada intervalo de sueño se ajusta para tener en cuenta la cantidad de tiempo consumido para obtener todas estas estadísticas. Además, cada muestra también registra el tiempo que tomó escalar cada medición por el tiempo real transcurrido entre muestras. Esto intenta dar cuenta de los retrasos en el propio cpustat.

Cuando se ejecuta sin ningún argumento, cpustat mostrará lo siguiente de forma predeterminada: intervalo de muestreo: 200 ms, intervalo de resumen: 2 s (10 muestras), mostrando los 10 procesos principales, filtro de usuario: todos, filtro pid: todos como se muestra en la captura de pantalla a continuación:

$ sudo $GOBIN/cpustat 

Del resultado anterior, los siguientes son los significados de las métricas de resumen de todo el sistema que se muestran antes de los campos:

  • usr: tiempo de ejecución mínimo/promedio/máximo en modo de usuario como porcentaje de una CPU.
  • sys: tiempo de ejecución mínimo/promedio/máximo del modo del sistema como porcentaje de una CPU.
  • agradable: tiempo de ejecución de prioridad baja del modo de usuario mínimo/promedio/máximo como porcentaje de una CPU.
  • inactivo: tiempo de ejecución mínimo/promedio/máximo en modo de usuario como porcentaje de una CPU.
  • iowait: tiempo de retardo mínimo/promedio/máximo en espera de E/S de disco.
  • poda: recuento mínimo/promedio/máximo de procesos en un estado ejecutable (igual que el promedio de carga).
  • pblock: recuento mínimo/promedio/máximo de procesos bloqueados en la E/S de disco.
  • pstart: número de procesos/subprocesos iniciados en este intervalo de resumen.

Aún a partir de la salida anterior, para un proceso dado, las diferentes columnas significan:

  • nombre: nombre de proceso común de/proc/pid/stat o/proc/pid/cmdline.
  • pid - ID de proceso, también conocido como "tgid".
  • min - muestra más baja de tiempo de usuario + sistema para el pid, medido desde/proc/pid/stat. La escala es un porcentaje de una CPU.
  • max - muestra más alta de tiempo de usuario + sistema para este pid, también medido desde/proc/pid/stat.
  • usr: tiempo promedio del usuario para el pid durante el período de resumen, medido desde/proc/pid/stat.
  • sys: tiempo promedio del sistema para el pid durante el período de resumen, medido desde/proc/pid/stat.
  • agradable - indica el valor actual "agradable" para el proceso, medido desde/proc/pid/stat. Más alto significa "mejor".
  • runq: tiempo en el que el proceso y todos sus subprocesos se gastan en ejecución pero en espera de ejecutarse, medido desde las estadísticas de tareas a través de netlink. La escala es un porcentaje de una CPU.
  • iow: tiempo del proceso y todos sus subprocesos bloqueados por E/S de disco, medido desde las estadísticas de tareas a través de netlink. La escala es un porcentaje de una CPU, promediado durante el intervalo de resumen.
  • intercambio: tiempo del proceso y todos sus subprocesos en espera de ser intercambiados, medido desde las estadísticas de tareas a través de netlink. La escala es un porcentaje de una CPU, promediado durante el intervalo de resumen.
  • vcx e icx: número total de cambios de contexto voluntarios por el proceso y todos sus subprocesos durante el intervalo de resumen, medido desde las estadísticas de tareas a través de netlink.
  • rss: valor RSS actual obtenido de/proc/pid/stat. Es la cantidad de memoria que utiliza este proceso.
  • ctime: suma del tiempo de CPU del usuario + sistema consumido por los niños en espera que salieron durante este intervalo de resumen, medido desde/proc/pid/stat.

Tenga en cuenta que los procesos secundarios de ejecución prolongada a menudo pueden confundir esta medición, porque el tiempo se informa solo cuando el proceso secundario sale. Sin embargo, esto es útil para medir el impacto de trabajos cron frecuentes y verificaciones de estado donde el tiempo de la CPU a menudo es consumido por muchos procesos secundarios.

  • thrd: número de subprocesos al final del intervalo de resumen, medido desde/proc/pid/stat.
  • sam: número de muestras para este proceso incluidas en el intervalo de resumen. Los procesos que se iniciaron o finalizaron recientemente pueden haber sido visibles para menos muestras que el intervalo de resumen.

El siguiente comando muestra los 10 principales procesos de usuario raíz que se ejecutan en el sistema:

$ sudo $GOBIN/cpustat -u root

Para mostrar la salida en un modo de terminal elegante, use la marca -t de la siguiente manera:

$ sudo $GOBIN/cpustat -u roo -t

Para ver los 20 procesos principales de Linux que se ejecutan en el sistema:

$ sudo $GOBIN/cpustat -n 20 

También puede escribir el perfil de la CPU en un archivo usando la opción -cpuprofile de la siguiente manera y luego usar el comando cat para ver el archivo:

$ sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
$ cat cpuprof.txt

Para mostrar información de ayuda, use la marca -h de la siguiente manera:

$ sudo $GOBIN/cpustat -h

Encuentre información adicional en el repositorio de cpustat Github: https://github.com/uber-common/cpustat

¡Eso es todo! En este artículo, le mostramos cómo instalar y usar cpustat, una herramienta útil para medir el rendimiento del sistema para Linux. Comparta sus pensamientos con nosotros a través de la sección de comentarios a continuación.