Comprender la longitud de la cola de ejecución de la CPU en Linux

El sistema operativo Linux utiliza procesos para realizar todas las tareas del sistema y el usuario. Estos procesos pueden bloquearse, terminarse, ejecutarse o esperar a ser ejecutados. El número de procesos en los dos últimos estados mencionados determina la longitud de la cola de ejecución de la CPU.

Existen varios estados de proceso posibles:

  • Ejecutable o en ejecución
  • Pausa interrumpible
  • Pausa ininterrumpible
  • Detenido
  • Zombie

Los procesos que esperan recursos o señales de otras funciones estarán en estado de pausa interrumpible o ininterrumpible. El proceso se pone en pausa hasta que los recursos que necesita estén disponibles. Luego, dependiendo del tipo de pausa, el proceso puede pasar a un estado ejecutable o permanecer en pausa.

Incluso cuando un proceso tiene todos los recursos que necesita, no comienza a ejecutarse de inmediato. Pasa al estado ejecutable y se pone en cola junto con otros procesos en el mismo estado. La CPU puede ejecutar estos procesos en los próximos segundos o milisegundos. El programador ordena los procesos para la CPU y determina qué proceso se ejecutará a continuación.

Dependiendo de la configuración de hardware del sistema, la longitud de esta cola ejecutable —llamada cola de ejecución de la CPU— puede ser corta o larga. Si la longitud de la cola de ejecución es corta, esto indica que la CPU está infrautilizada. Si es larga, significa que la CPU no es lo suficientemente potente para ejecutar todos los procesos o que no hay suficientes núcleos en la CPU. En una CPU utilizada de manera óptima, la longitud de la cola de ejecución será igual al número de núcleos en un sistema.

Hay algunos comandos en el sistema operativo Linux que ayudan a determinar la longitud de la cola de ejecución de la CPU, la utilización de la CPU y la utilización de recursos para comprender si el rendimiento del sistema se ve afectado. En este artículo, revisamos algunos de estos comandos y cómo usarlos.

Comandos para monitorear la cola de ejecución de la CPU

Linux viene con algunos comandos para monitorear la carga en la CPU. Antes de proceder con estos comandos, ten en cuenta lo siguiente: si la información que proporcionan es insuficiente, también hay herramientas de terceros que están disponibles públicamente.

Informe de actividad del sistema (sar)

El comando sar forma parte del paquete sysstat, que no está preinstalado en ninguna distribución de Linux. Se puede instalar utilizando los siguientes comandos.

Para sistemas basados en Debian:

apt install sysstat

Para sistemas basados en RPM:

yum install sysstat

El comando sar ayuda a recopilar todas las estadísticas necesarias de actividad y rendimiento del sistema. Este comando acepta opciones para mostrar métricas sobre recursos como CPU, memoria, red, discos, colas y mucho más. La opción q se utiliza para acceder a la longitud de la cola de ejecución y la carga media en la CPU a través del comando sar. La salida del comando proporciona la siguiente información:

  • runq-sz: Longitud de la cola de ejecución
  • plist-sz: Número de tareas en la lista de tareas
  • ldavg-1: Carga media del sistema durante el último minuto
  • ldavg-5: Carga media del sistema durante los últimos cinco minutos
  • ldavg-15: Carga media del sistema durante los últimos 15 minutos
  • blocked: Número de tareas bloqueadas actualmente, esperando a que se complete la E/S

Junto con la opción, el comando también necesita el intervalo de actualización. Este número representa la frecuencia con la que se debe actualizar la salida. Por ejemplo, el siguiente comando actualizará la salida cada segundo. Esto agregará una nueva fila a la tabla:

sar -q 1

A continuación, la figura 1 muestra la salida del comando sar actualizando la información cada segundo.

Fig. 1: sar command output Fig 1: salida del comando sar

La carga en este sistema en particular es extremadamente baja. La cola de ejecución en la captura de pantalla es cero. Mientras tanto, hay más de 768 tareas en la lista de tareas. Sin embargo, puede observarse que el número de tareas está disminuyendo. Esto significa que la carga en este sistema no es pesada. El sistema está sobreconfigurado para las tareas que realiza. La carga media en los últimos minutos también nos indica que prácticamente no hay carga en la CPU, aunque sea una unidad de núcleo único. Además, no hay procesos bloqueados.

El comando ps

El comando ps es otra herramienta útil para comprobar el estado de los procesos. La lista de procesos se puede filtrar utilizando las diversas opciones disponibles para el comando. La salida del comando ps incluye la columna STAT, que muestra el estado de cada proceso en ejecución. La figura 2 muestra una salida de ejemplo.

Fig. 2: ps command output Fig 2: salida del comando ps

La primera letra del valor de la columna STAT es el estado del proceso, donde S significa sleep (pausa) y R quiere decir runnable (ejecutable).

El comando top

El comando top puede mostrar el estado de cualquier proceso. Estas opciones se pueden utilizar para filtrar resultados y obtener una lista de los procesos relevantes.

Fig. 3: top command output Fig 3: salida del comando top

La columna S en la salida del comando top, como se muestra en la figura 3, denota el estado del proceso. La imagen también deja ver el comando top como ejecutando (R) y un proceso Docker en estado de pausa.

El comando top también proporciona las tres cifras medias de carga de la CPU en la esquina superior derecha. Estas cifras representan la carga media en la CPU en los últimos 1, 5 y 15 minutos. La figura 3 muestra que la carga media no ha aumentado más allá de 0,0 en los últimos 15 minutos.

El archivo de estado /proc

Linux almacena toda la información relacionada con el proceso como archivos en el directorio /proc. Cada proceso obtiene su propio directorio, donde el ID de proceso (PID) es el nombre del directorio. Cada directorio PID contiene un archivo llamado status, que contiene toda la información sobre el proceso. Por supuesto, esto incluye su estado. Simplemente usar el comando cat en el archivo y grep para filtrar el State te dirá el estado del proceso. El siguiente comando indicará el estado del proceso Docker que se ejecuta en un sistema Linux. El PID del proceso Docker se toma de la figura 3 anterior.

cat /proc/126/status | grep State

A continuación, la figura 4 muestra la salida de este comando.

Fig. 4: State of a process using the /proc status file Fig. 4: estado de un proceso usando el archivo de estado /proc

Uso de la CPU vs. Longitud de la cola de ejecución: cómo entender las métricas

Los tres números de utilización de la CPU proporcionados por comandos como top, sar, y uptime representan la carga que la CPU está asumiendo y cuánto espacio libre todavía está disponible. Este número de utilización incluye procesos en estado en ejecución, ejecutable e interrumpido. Por ejemplo, un número inferior a 1,0 en una CPU de un solo núcleo significa que aún queda espacio para nuevos procesos. Una carga de 1,0 en un procesador de un solo núcleo significa que se utiliza el 100% de la CPU. Cualquier cifra superior a 1,0 significa que una CPU de un solo núcleo está sobrecargada.

Del mismo modo, una carga promedio de 2,0 en un procesador de doble núcleo indica un 100% de utilización de la CPU. Una carga de 4,0 en un procesador de cuatro núcleos indica un 100% de utilización y así sucesivamente. ¿Cómo se relaciona este uso con la longitud de la cola de ejecución de la CPU? Al calcular la carga media, se incluyen los procesos en los estados Ejecutando y Ejecutable. Estos también son los estados que representan la cola de ejecución de una CPU. Por lo tanto, incluso si la cola de ejecución es larga, el rendimiento del sistema no se verá comprometido siempre y cuando la carga promedio esté dentro de la medida de 1,0 por núcleo.

Esto se debe a que la CPU es capaz de ejecutar eficientemente todos los procesos a tiempo y mantener la carga media bajo control, incluso con un gran número de procesos esperando recibir tiempo de la CPU.

También debes tener en cuenta la carga media de los últimos 5 y 15 minutos, ya que estos números indican la carga media mantenida durante una cantidad de tiempo considerable. Si la CPU está sobrecargada, esto resultaría en una carga media más alta.

Cómo resolver los problemas de carga alta

Hay dos maneras de resolver los problemas de carga alta. O bien puedes agregar más hardware al sistema u optimizar el código para utilizar mejor los recursos. Si un clúster de servidores está asumiendo cargas altas regularmente, el clúster se puede escalar añadiendo más nodos o ampliar agregando más memoria y CPU más rápidas y grandes a cada nodo.

No obstante, este enfoque podría no ser viable si el código que se ejecuta en estos nodos no está optimizado. Si el código no está liberando la memoria de nuevo al pool o si el código está bloqueando otros programas al retener los recursos durante más tiempo del necesario, agregar más hardware no mejorará la carga media.

Usar el comando iotop mostrará la lista de todos los procesos que utilizan los recursos de E/S. Esto permite entender por qué un proceso puede estar bloqueado —o bloqueando otros procesos— o empleando recursos durante mucho tiempo. Combinar esta información con los números medios de carga de la CPU debería proporcionar una imagen más clara de la utilización de la CPU.

Los problemas de carga alta generalmente surgen cuando el código no está optimizado, por lo que este debe ser el enfoque principal. El escalamiento de hardware se debe realizar solo después de que se complete la optimización del código.

Was this article helpful?
Supervise su entorno Linux

Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us