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 de la CPU y la saturación de una manera efectiva, 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 mayor frecuencia de cada proceso que se está ejecutando 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 colorido panel de desplazamiento de cada muestra.

Cómo instalar Cpustat en Linux

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

  1. Install GoLang (Go Programming Language) in 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 GOBIN variable:

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

Cómo usar Cpustat en Linux

Cuando se complete el proceso de instalación, ejecute cpustat de la siguiente manera con los privilegios de root usando el comando sudo que es si usted controla 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.

rojo

  1. Learn How to Set Your $PATH Variables Permanently in Linux

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

  • for each PID, read /proc/pid/stat, then compute difference from previous sample.
  • in case it’s a new PID, read /proc/pid/cmdline.
  • for each PID, send a netlink message to fetch the taskstats, compute difference from previous sample.
  • fetch /proc/stat to get the overall system stats.

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 transcurrido real entre las muestras. Esto intenta dar cuenta de los retrasos en el propio cpustat.

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

$ sudo $GOBIN/cpustat 

De la salida anterior, a continuación se muestran los significados de las métricas de resumen de todo el sistema que se muestran antes de los campos:

  • usr – min/avg/max user mode run time as a percentage of a CPU.
  • sys – min/avg/max system mode run time as a percentage of a CPU.
  • nice – min/avg/max user mode low priority run time as a percentage of a CPU.
  • idle – min/avg/max user mode run time as a percentage of a CPU.
  • iowait – min/avg/max delay time waiting for disk IO.
  • prun – min/avg/max count of processes in a runnable state (same as load average).
  • pblock – min/avg/max count of processes blocked on disk IO.
  • pstart – number of processes/threads started in this summary interval.

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

  • name – common process name from /proc/pid/stat or /proc/pid/cmdline.
  • pid – process id, also referred to as “tgid”.
  • min – lowest sample of user+system time for the pid, measured from /proc/pid/stat. Scale is a percentage of a CPU.
  • max – highest sample of user+system time for this pid, also measured from /proc/pid/stat.
  • usr – average user time for the pid over the summary period, measured from /proc/pid/stat.
  • sys – average system time for the pid over the summary period, measured from /proc/pid/stat.
  • nice – indicates current “nice” value for the process, measured from /proc/pid/stat. Higher means “nicer”.
  • runq – time the process and all of its threads spent runnable but waiting to run, measured from taskstats via netlink. Scale is a percentage of a CPU.
  • iow – time the process and all of its threads spent blocked by disk IO, measured from taskstats via netlink. Scale is a percentage of a CPU, averaged over the summary interval.
  • swap – time the process and all of its threads spent waiting to be swapped in, measured from taskstats via netlink. Scale is a percentage of a CPU, averaged over the summary interval.
  • vcx and icx – total number of voluntary context switches by the process and all of its threads over the summary interval, measured from taskstats via netlink.
  • rss – current RSS value fetched from /proc/pid/stat. It is the amount of memory this process is using.
  • ctime – sum of user+sys CPU time consumed by waited for children that exited during this summary interval, measured from /proc/pid/stat.

Tenga en cuenta que los procesos secundarios de larga ejecución a menudo pueden confundir esta medición, porque el tiempo se informa solo cuando el proceso secundario se cierra. Sin embargo, esto es útil para medir el impacto de las tareas de cron frecuentes y las comprobaciones de estado en las que muchos procesos secundarios suelen consumir el tiempo de CPU.

  • thrd – number of threads at the end of the summary interval, measured from /proc/pid/stat.
  • sam – number of samples for this process included in the summary interval. Processes that have recently started or exited may have been visible for fewer samples than the summary interval.

El siguiente comando muestra los 10 procesos de usuario root principales 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 el número x de procesos superior (el valor predeterminado es 10), puede usar el indicador -n , el siguiente comando muestra 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 Github de cpustat: 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. Comparte tus pensamientos con nosotros a través de la sección de comentarios a continuación.