GNU/Linux >> Tutoriales Linux >  >> Linux

Comprender el promedio de carga del sistema operativo y la cola de ejecución/cola bloqueada en términos de utilización de la CPU en Linux

Cuando se trata de solucionar un problema de rendimiento en Linux, es muy importante conocer los conceptos básicos de varios resultados de comandos, como el tiempo de actividad, vmstat. En esta publicación, intentaremos comprender los promedios de carga y la cola de ejecución/cola bloqueada en términos de utilización de la CPU. Primero, comprendamos qué es el promedio de carga:

El promedio de carga es el número de trabajos en la cola de ejecución (estado R) o en espera de E/S de disco (estado D) promediados durante 1, 5 y 15 minutos. Salida de ejemplo de tiempo de actividad/comando superior:

# uptime
11:49:14 up 25 days, 5:56, 68 users, load average: 0.03, 0.13, 0.47
# top -b -n 1
top - 11:49:34 up 25 days, 5:56, 68 users, load average: 0.09, 0.14, 0.46
Tasks: 456 total, 1 running, 445 sleeping, 10 stopped, 0 zombie
Cpu(s): 0.8%us, 0.4%sy, 0.0%ni, 98.6%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 141823788k total, 140483388k used, 1340400k free, 313452k buffers
Swap: 16772092k total, 0k used, 16772092k free, 134695384k cached

La regla general es:

  • Sistema de núcleo único – si el promedio de carga es 1.00, significa que el sistema está completamente utilizado y si habrá más tareas entrantes, se pondrán en cola y esperarán su ejecución.
  • Sistema de núcleo único – si el promedio de carga es 2,00, significa que el sistema ya se está utilizando y algunas tareas ya están en cola y esperando su ejecución.
  • Sistema multinúcleo (4 núcleos) – si el promedio de carga es 1.00, significa que el sistema usa 1/4 de sus capacidades de CPU, una tarea se está ejecutando activamente y todavía hay 3 núcleos en la etapa 'inactiva'.
  • Sistema multinúcleo (4 núcleos) – si el promedio de carga es 4.00, significa que el sistema usa los 4 núcleos e indica que el sistema está completamente utilizado.

¿Queda algo de margen en los casos anteriores? – normalmente no – si el promedio de carga está cerca de la cantidad de núcleos en el sistema – se debe revisar el sistema operativo para buscar cuellos de botella reales y ajustes faltantes o tal vez el sistema operativo no se escala correctamente para cumplir con las tareas de aplicaciones/bases de datos.

¿Cómo se calcula el valor promedio de carga en Active OS? – para esto necesitamos encontrar la cola de ejecución que está disponible a través del comando vmstat:

Sistema inactivo (sistema de 8 núcleos)

# vmstat 1 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1674516 316588 134364752 0 0 0 1 0 0 1 0 99 0 0
0 0 0 1674624 316588 134364752 0 0 0 0 195 307 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 12 168 302 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 0 198 331 0 0 100 0 0
0 0 0 1674624 316596 134364752 0 0 0 0 206 356 0 0 100 0 0
0 0 0 1674624 316600 134364736 0 0 0 12 197 333 0 0 100 0 0

Sistema activo (sistema de 8 núcleos)

# vmstat 1 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
5 0 0 1674516 316588 134364752 0 0 0 1 0 0 1 0 99 0 0
7 0 0 1674624 316588 134364752 0 0 0 0 195 307 0 0 100 0 0
2 0 0 1674624 316596 134364752 0 0 0 12 168 302 0 0 100 0 0
6 0 0 1674624 316596 134364752 0 0 0 0 198 331 0 0 100 0 0
1 0 0 1674624 316596 134364752 0 0 0 0 206 356 0 0 100 0 0
8 0 0 1674624 316600 134364736 0 0 0 12 197 333 0 0 100 0 0

Los resultados anteriores son un ejemplo:el primero muestra que la cola de ejecución actual (r) es 0, donde en el sistema activo la cola de ejecución salta de 1 a 8 en 6 sondas.

¿Qué es exactamente la cola de ejecución?

cola de ejecución :número de procesos activos (en ejecución) y en cola.

En el segundo ejemplo, cuando el sistema está activo, vemos una cola de ejecución de 8; este ya es el límite superior máximo que debe ejecutar el sistema con 8 núcleos. Por supuesto, la cola de ejecución puede mostrar valores como 36 o incluso 101; estarán perfectamente bien si en el primero 36 tenemos 36 núcleos y en el segundo 101 tenemos más de 101 núcleos.

La columna de la cola de ejecución debe ser siempre menor/igual que la cantidad de núcleos instalados en el sistema; por supuesto, la cola de ejecución de 100 puede ser visible en un sistema con solo 8 núcleos; significará que la CPU atiende activamente 8 procesos y el resto 92 están en cola y esperando la ejecución. Si la cola de ejecución está por encima de los núcleos de CPU instalados, se debe realizar una investigación en términos de verificación del rendimiento de la aplicación/base de datos y la falta de ajuste o puede indicar que el sistema no se ha ampliado correctamente para atender dicha cola de ejecución/carga.

Al igual que el promedio de carga, la cola de ejecución debe permanecer por debajo de la cantidad de núcleos instalados; no mantener este valor por debajo del umbral máximo provocará una ralentización/bloqueo o un caso de desalojo (si el sistema está habilitado para alta disponibilidad), ya que el sistema operativo simplemente puede poner en cola el monitoreo de latidos en el disco/la red. capa ya que está ocupado sirviendo otras tareas. Un promedio de carga alto y una cola de ejecución provocarán un bloqueo repentino o un caso bloqueado:vale la pena monitorear ambos valores de forma activa a través de herramientas de monitoreo de terceros y alertar cuando la cola de ejecución o el promedio de carga consumen más del 70 % de los recursos reales de la CPU.

La segunda columna importante que también toma Load Average es el estado 'b' en vmstat que explica los procesos de estado bloqueado; esto se puede interpretar fácilmente como procesos de estado D (en espera de que finalice la E/S de back-end, generalmente Actividad de almacenamiento). Si el promedio de carga es alto y ningún proceso se está ejecutando activamente y vmstat muestra un valor de estado 'b' anormal, entonces es el momento de revisar el rendimiento de SAN o verificar cualquier componente del sistema operativo como ISCSI/NFS/NIC/HBA que podría experimentar algunos problemas y conducir a estado de bloqueo grave bajo Linux. Por ejemplo, el servidor NFS podría estar ocupado en el nivel de la CPU y todos los procesos/tareas del cliente (Linux) se pondrán en cola en el estado-d (b), lo que conducirá a la "puesta en cola", que luego podría liberar una cola de ejecución masiva después, ya que todos los procesos estaban esperando que finalice la E/S de back-end más tarde, es posible que vuelvan a cambiar a En ejecución, lo que genera una cola de ejecución masiva que puede causar un estado de bloqueo/pánico o provocar un caso de desalojo posterior.

El rendimiento de la red y el tráfico TCP/UDP también se verán afectados debido a un promedio de carga alto, ya que el sistema simplemente estará ocupado realizando otras tareas además de confirmar las conexiones entrantes/salientes y priorizar el tráfico de E/S de red entrante a través de NFS/ISCSI, etc. En algunos casos, TOP podría mostrar aumentar el valor de %CPU para que sea mayor que 100, esto está perfectamente bien ya que el comando TOP de forma predeterminada en Linux muestra operaciones de un solo núcleo, por lo tanto, en configuraciones de varios núcleos, el valor de %CPU puede ser mayor que 100%. Por ejemplo, si PID utiliza 4 núcleos por completo, el valor de %CPU mostrará 400

# top
top - 11:49:34 up 25 days, 5:56, 68 users, load average: 0.09, 0.14, 0.46
Tasks: 456 total, 1 running, 445 sleeping, 10 stopped, 0 zombie
Cpu(s): 0.8%us, 0.4%sy, 0.0%ni, 98.6%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 141823788k total, 140483388k used, 1340400k free, 313452k buffers
Swap: 16772092k total, 0k used, 16772092k free, 134695384k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1438 java 20 0 945m 4220 2528 S 400.5 0.0 56:31.95 java <---

Información sobre %CPU:

##
%CPU -- CPU Usage
The task's share of the elapsed CPU time since the last screen
update, expressed as a percentage of total CPU time.

In a true SMP environment, if a process is multi-threaded and top
is not operating in Threads mode, amounts greater than 100% may
be reported. You toggle Threads mode with the 'H' interactive
command.
##

Para enumerar rápidamente los procesos en ejecución/bloqueados, use el siguiente comando ps:

# ps r -Af

Para enumerar los procesos de subprocesos para verificar si algunos subprocesos generados por el PID principal no están causando un problema de pico de CPU, ejecute:

# ps -e -To pid,ppid,state,pcpu,command

o

# ps -elfL

También para verificar si las CPU del sistema operativo están sirviendo activamente el espacio del usuario (EE. UU.), utilice los siguientes ejemplos de comandos:

# sar -P ALL 1
Linux 3.8.13-118.13.3.el6uek.x86_64 (lgeeklab) 01/08/2017 _x86_64_ (8 CPU)

02:40:38 PM CPU %user %nice %system %iowait %steal %idle
02:40:39 PM all 12.62 0.00 0.12 6.88 0.00 80.38
02:40:39 PM 0 0.00 0.00 0.00 54.55 0.00 45.45
02:40:39 PM 1 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 2 0.99 0.00 0.00 0.00 0.00 99.01
02:40:39 PM 3 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 4 100.00 0.00 0.00 0.00 0.00 0.00
02:40:39 PM 5 0.98 0.00 0.98 0.00 0.00 98.04
02:40:39 PM 6 0.00 0.00 0.00 0.00 0.00 100.00
02:40:39 PM 7 0.00 0.00 0.00 0.00 0.00 100.00

Average: CPU %user %nice %system %iowait %steal %idle
Average: all 12.63 0.00 0.13 6.00 0.00 81.24
Average: 0 0.00 0.00 0.00 45.23 0.00 54.77
Average: 1 0.50 0.00 0.00 3.00 0.00 96.50
Average: 2 0.50 0.00 0.00 0.00 0.00 99.50
Average: 3 0.00 0.00 0.00 0.50 0.00 99.50
Average: 4 100.00 0.00 0.00 0.00 0.00 0.00
Average: 5 0.50 0.00 0.50 0.00 0.00 99.00
Average: 6 0.00 0.00 0.00 0.00 0.00 100.00
Average: 7 0.00 0.00 0.00 0.00 0.00 100.00
# mpstat -P ALL
Linux 3.8.13-118.13.3.el6uek.x86_64 (geeklab) 01/08/2017 _x86_64_ (8 CPU)

02:41:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
02:41:26 PM all 0.79 0.00 0.10 1.18 0.00 0.02 0.00 0.00 97.92
02:41:26 PM 0 0.94 0.00 0.14 2.84 0.00 0.02 0.00 0.00 96.06
02:41:26 PM 1 0.94 0.00 0.14 2.70 0.00 0.02 0.00 0.00 96.20
02:41:26 PM 2 0.93 0.00 0.14 1.13 0.00 0.03 0.00 0.00 97.77
02:41:26 PM 3 0.94 0.00 0.13 2.71 0.00 0.02 0.00 0.00 96.20
02:41:26 PM 4 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.28
02:41:26 PM 5 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.27
02:41:26 PM 6 0.65 0.00 0.06 0.01 0.00 0.01 0.00 0.00 99.27
02:41:26 PM 7 0.64 0.00 0.05 0.01 0.00 0.01 0.00 0.00 99.29

Además, los interruptores de comando TOP a continuación se pueden usar para obtener información de subprocesos PID y también qué núcleo sirvió PID la última vez:

Para mostrar hilos en TOP:

# top -H

Para mostrar qué núcleo sirvió PID la última vez, ejecute:

# top

Luego presione 'F ' y presione 'J ' y presione enter para obtener el siguiente resultado donde 'P ' la fila será la última CPU utilizada.

Tasks: 1045 total, 2 running, 1043 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 93.6%id, 5.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16159656k total, 15349888k used, 809768k free, 597960k buffers
Swap: 8232956k total, 218784k used, 8014172k free, 9840192k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND
10428 root 20 0 15228 2228 1724 S 0.7 0.0 0:26.86 2 top
10838 oracle 20 0 4921m 585m 5708 S 0.7 3.7 137:11.13 3 mysqld
15360 root 20 0 15888 2792 1724 R 0.7 0.0 0:00.55 6 top
528 root 20 0 0 0 0 S 0.3 0.0 76:39.23 0 jbd2/dm-0-8
9003 root 20 0 0 0 0 S 0.3 0.0 8:49.33 2 jbd2/dm-3-8
10815 oracle 20 0 4921m 585m 5708 S 0.3 3.7 13:35.18 1 mysqld
14902 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 19:54.77 3 java
15021 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 20:09.19 1 java
15094 oracle 20 0 9431m 2.4g 28m S 0.3 15.5 6:54.88 3 java
32045 enduser 20 0 15228 2220 1724 S 0.3 0.0 9:32.73 5 top
32278 root 20 0 15228 2212 1724 S 0.3 0.0 9:32.96 1 top

Preguntas frecuentes

¿Debería el sistema ejecutarse con un límite superior como 8 procesos en ejecución con un promedio de carga del mismo valor en un sistema de 8 núcleos?

Respuesta - No

El sistema debe ampliarse correctamente y no exceder el 70% de sus posibilidades, por lo que hay cierto margen para que se ejecuten nuevas tareas, esto es especialmente importante para los servidores habilitados para HA y para los sistemas donde hay cualquier High-End. Componentes de E/S/red que pueden ponerse accidentalmente en cola por el sistema operativo activo. El equipo de APP/DB debe realizar esta verificación en profundidad para verificar exactamente qué se está ejecutando activamente en el sistema operativo.

¿Solo las tareas de APP/DB están causando un alto promedio de carga/cola de ejecución

Respuesta - No

Algunas tareas del sistema operativo pueden causar una cola de ejecución alta o un promedio de carga, pero estos son casos realmente raros. En este caso, el comando superior será útil para monitorear los valores US /SY / NI / ID / WA / HI / SI / ST y enfocarse en la sección SY (Sistema) que indica cuánto tiempo de procesador pasa en el nivel del kernel. Asegúrese de que siempre sea inferior a la utilización real de EE. UU. (Usuario) y que SY no esté, por ejemplo, utilizando el 20-30% de la CPU (depende de la configuración de la CPU y el caso real).

Por ejemplo, un %SY alto puede ser visible durante operaciones de E/S alta/red o durante casos de escasez de memoria; el proceso de ejemplo es:kjorunald. Un alto %SY también puede ser visible durante cargas pesadas del sistema, por ejemplo, una cola de ejecución alta o una cola bloqueada causada por tareas de aplicaciones/bases de datos, principalmente entonces se observa que %SY estará alrededor del 20-30% donde %US lo hará. ser mucho más alto.

Un %SY más alto no siempre significa que hay un problema con el kernel o el sistema operativo; por ejemplo, puede haber un código de aplicación/base de datos que está provocando que se realicen muchas llamadas al sistema en torno a una función específica del kernel. verificar la interacción PID específica.

¿Significa que un solo núcleo solo puede servir una tarea de un solo proceso en ese momento?

Respuesta - Sí/No

Las CPU están diseñadas para realizar múltiples tareas, incluso con un sistema de un solo núcleo, los usuarios aún pueden ejecutar múltiples tareas e iniciar múltiples aplicaciones. ser ejecutado (esto puede suceder un par de veces por segundo).

Los sistemas modernos utilizarán funciones multinúcleo/multiproceso para hacer que este impacto de conmutación sea menos visible; por lo tanto, en los sistemas empresariales, los usuarios tienen una configuración multinúcleo en la que las aplicaciones pueden crear subprocesos más pequeños que lograrán operaciones multitarea reales (cada núcleo puede servir para una tarea diferente), lo que lleva a mucho más. menos promedio de carga en el sistema y menor cola de tareas:por ejemplo, el sistema de doble núcleo puede dividir aplicaciones/subprocesos/tareas en dos núcleos separados, lo que permite que el núcleo cambie solo la mitad de las tareas en comparación con el sistema de un solo núcleo, lo que causa mucho menos impacto en el rendimiento del sistema.


Linux
  1. Comprender las llamadas al sistema en Linux con strace

  2. Linux:¿comprensión de los permisos y tipos de archivos de Unix?

  3. Linux:¿cómo funciona el promedio de carga con las CPU modernas?

  4. Comprobar la carga del sistema en Linux

  5. Alta utilización de la CPU pero bajo promedio de carga

5 formas de verificar la información de la CPU en Linux

¿Qué es el promedio de carga en Linux?

Cómo verificar el uso o la utilización de la CPU de Linux

Cómo escribir y ejecutar un programa C en Linux

Introducción a la supervisión y el ajuste del rendimiento de Linux

Cómo ejecutar paquetes .run y .bin en el sistema Linux