Conceptos básicos de la CPU: carga promedio [optimización del rendimiento de Linux]

comando top o uptime para ver la carga promedio

$ uptime 
03:44:21 up 4 days, 15:31, 1 user, load average: 0.63, 0.83, 0.76
03:44:21 // 当前时间 
up 4 days, 15:31  // 系统运行时间 
1 user // 正在登录用户数 
load average: 0.63, 0.83, 0.76   //过去1分钟、5分钟、15分钟的平均负载

¿Cuál es el promedio de carga?

La carga promedio se refiere al número promedio de procesos que el sistema se encuentra en un estado ejecutable e ininterrumpible por unidad de tiempo , es decir, el número promedio de procesos activos , que no está directamente relacionado con el uso de la CPU.

(El número promedio de procesos activos se entiende intuitivamente como el número de procesos activos por unidad de tiempo, pero en realidad es el promedio que decae exponencialmente del número de procesos activos. Este es un método de cálculo más rápido para el sistema y se considera directamente como activo El promedio del número de procesos también está bien)

Por ejemplo, el promedio de carga es 2

En un sistema con sólo 2 CPU, esto significa que todas las CPU están completamente ocupadas;

En un sistema de 4 CPU, significa que la CPU está inactiva en un 50 %;

En un sistema con solo 1 CPU, significa que la mitad de los procesos no pueden competir por la CPU.

Nota:

Procesos en estado ejecutable : se refiere a procesos que están usando la CPU o esperando la CPU (estado R)

Procesos promedio en estado ininterrumpible : procesos que se encuentran en procesos críticos en el estado del núcleo, y estos procesos son ininterrumpibles. (estado D)

Por ejemplo, la más común es esperar la respuesta de E/S del dispositivo de hardware. Otro ejemplo es que cuando un proceso lee y escribe datos en el disco, para garantizar la coherencia de los datos, no puede ser interrumpido por otros procesos o interrupciones antes de obtener una respuesta del disco. un estado ininterrumpido. Si el proceso se interrumpe en este momento, es fácil causar inconsistencia entre los datos del disco y los datos del proceso. El estado ininterrumpible es en realidad un mecanismo de protección del sistema para procesos y dispositivos de hardware.

¿Qué es un promedio de carga razonable?

Idealmente, la carga promedio es igual a la cantidad de CPU.

Primero, necesita saber cuántas CPU tiene el sistema . Esto se puede hacer mediante el comando superior o leer desde el archivo /proc/cpuinfo, como

grep 'model name'  /proc/cpuinfo | wc -l

La carga media tiene 3 valores en los que fijarse . El promedio de tres intervalos de tiempo diferentes nos proporciona una fuente de datos para analizar las tendencias de carga del sistema .

Por ejemplo, si el valor de 1 minuto es mucho menor que el valor de 15 minutos, significa que la carga del sistema ha estado disminuyendo en el último minuto, pero hubo una carga pesada en los últimos 15 minutos.

En un entorno de producción real , cuando la carga promedio es superior al 70% del número de CPU , se debe analizar y solucionar el problema de la carga alta. Una vez que la carga es demasiado alta, puede hacer que el proceso responda lentamente, afectando así el funcionamiento normal del servicio.

Pero este número no es absoluto. Lo más recomendado es monitorear la carga promedio del sistema y luego juzgar la tendencia de cambio de carga en función de más datos históricos. Cuando descubra que la carga tiene una tendencia ascendente obvia, por ejemplo, la carga se ha duplicado, realice un análisis e investigación.

Promedio de carga y utilización de CPU

¿Un promedio de carga alto significa un uso elevado de la CPU?

La carga promedio se refiere a la cantidad de procesos en estado ejecutable y en estado ininterrumpible por unidad de tiempo. En definitiva, incluye no solo los procesos que utilizan la CPU , sino también los procesos que esperan la CPU y las E/S .

El uso de la CPU es una estadística de qué tan ocupada está la CPU por unidad de tiempo y no corresponde necesariamente a la carga promedio. Por ejemplo:

  • En los procesos con uso intensivo de CPU, el uso de una gran cantidad de CPU hará que la carga promedio aumente, y los dos son consistentes en este momento;
  • Para procesos con uso intensivo de E/S, esperar E/S también hará que la carga promedio aumente, pero el uso de la CPU no es necesariamente alto;
  • Una gran cantidad de procesos que esperan la programación de la CPU también harán que la carga promedio aumente y la tasa de uso de la CPU en este momento también será relativamente alta.

(El promedio de carga alto puede deberse a procesos que hacen un uso intensivo de la CPU; un promedio de carga alto no significa necesariamente un uso elevado de la CPU, también puede significar que la E/S esté más ocupada)

Análisis de casos de carga promedio.

Preparación antes del experimento.

1Configuración de la máquina: 2CPU, 8GB de memoria

2 Siga los paquetes de estrés y sysstat con anticipación

Stress es una herramienta de prueba de estrés del sistema Linux, que se utiliza aquí para procesos anormales para simular escenarios donde aumenta la carga promedio.

sysstat contiene herramientas de rendimiento de Linux de uso común para monitorear y analizar el rendimiento del sistema. Usaremos mpstat y pidstat.

  • mpstat es una herramienta de análisis de rendimiento de CPU multinúcleo de uso común, que se utiliza para ver los indicadores de rendimiento de cada CPU y los indicadores promedio de todas las CPU en tiempo real.
  • Pidstat es una herramienta de análisis de rendimiento de procesos de uso común, que se utiliza para ver los indicadores de rendimiento del proceso, como CPU, memoria, E/S y cambio de contexto en tiempo real.

3 Puede utilizar el tiempo de actividad para ver la carga promedio antes de la prueba.

$ uptime 
load average: 0.11, 0.15, 0.09

Escenario 1: proceso con uso intensivo de CPU

Simulación de estrés: tiempo de actividad para ver la carga promedio, mpstat para ver el uso de cada CPU, pidstat para ver el uso del proceso específico

#第一个终端:模拟一个CPU使用率100%的场景 
$ stress --cpu 1 --timeout 600 
#再开一个终端, -d 参数表示高亮显示变化的区域 
$ watch -d uptime 
..., load average: 1.00, 0.75, 0.39 
#第三个终端 mpstat查看CPU使用率的变化情况 
#-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据 
$ mpstat -P ALL 5 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 
13:30:06 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 
13:30:11 all 50.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00  49.95 
13:30:11 0    0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
13:30:11 1  100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00  0.00

Desde el segundo terminal, la carga promedio de 1 minuto aumenta lentamente a 1.00. En el tercer terminal también se puede ver que hay una tasa de uso de CPU del 100%, pero su iowait es 0. Indica un aumento de carga promedio debido al uso del 100% de la CPU

\

# 间隔5秒后输出一组数据 
$ pidstat -u 5 1 13:37:07 UID PID %usr %system %guest %wait %CPU CPU Command 
13:37:12 0  2962 100.00 0.00  0.00  0.00 100.00 1 stress

Puedes ver que el uso de CPU del proceso de estrés es del 100%.

\

Escenario 2: proceso intensivo de E/S

Simulación de estrés: tiempo de actividad para ver la carga promedio, mpstat para ver el uso de cada CPU, pidstat para ver el uso del proceso específico

#stress 模拟I/O压力,即不停地执行sync 
$ stress -i 1 --timeout 600 
#第二个终端 
$ watch -d uptime 
..., load average: 1.06, 0.58, 0.37 
#第三个终端 #显示所有CPU的指标,并在间隔5秒输出一组数据 
$ mpstat -P ALL 5 13 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 
13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84 
13:41:33  0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00  7.74 
13:41:33  1 0.00 0.00  0.81  0.20 0.00 0.00 0.00 0.00 0.00 98.99

La carga promedio en 1 minuto alcanzó lentamente 1.06, la tasa de utilización de uno de los sistemas de CPU fue 23.87 y iowait alcanzó el 67.53%, lo que indica que el aumento en la carga promedio se debió al aumento de iowait.

# 间隔5秒后输出一组数据,-u 表示CPU指标 
$ pidstat -u 5 1 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command 13:42:13  0 104  0.00 3.39  0.00  0.00  3.39  1  kworker/1:1H 
13:42:13  0 109  0.00 0.40  0.00  0.00  0.40  0  kworker/0:1H 
13:42:13  0 2997 2.00 35.53  0.00  3.99  37.52  1  stress 
13:42:13  0 3057 0.00 0.40  0.00  0.00  0.40  0  pidstat

Se puede encontrar que es causado por el proceso de estrés.

Escenario 3: Escenario con una gran cantidad de procesos

Simulación de estrés: tiempo de actividad para ver la carga promedio; pidstat para ver el uso de procesos específicos

#stress 模拟8个进程,超出了CPU运行能力就会出现等待CPU的进程 
$ stress -c 8 --timeout 600 
#系统只有两个CPU 
$ uptime 
..., load average: 7.97, 5.93, 3.02 
# 间隔5秒后输出一组数据 
$ pidstat -u 5 1 14:23:25 UID PID %usr %system %guest %wait %CPU CPU Command 
14:23:30 0  3190  25.00  0.00  0.00 74.80 25.00 0 stress 
14:23:30 0  3191  25.00  0.00  0.00 75.20 25.00 0 stress 
14:23:30 0  3192  25.00  0.00  0.00 74.80 25.00 1 stress 
14:23:30 0  3193  25.00  0.00  0.00 75.00 25.00 1 stress 
14:23:30 0  3194  24.80  0.00  0.00 74.60 24.80 0 stress 
14:23:30 0  3195  24.80  0.00  0.00 75.00 24.80 0 stress 
14:23:30 0  3196  24.80  0.00  0.00 74.60 24.80 1 stress 
14:23:30 0  3197  24.80  0.00  0.00 74.80 24.80 1 stress 
14:23:30 0  3200  0.00  0.20  0.00  0.20  0.20 0 pidstat

8 procesos compiten por 2 CPU y el tiempo que cada proceso espera por la CPU (columna% de espera) llega al 75%

Supongo que te gusta

Origin blog.csdn.net/weixin_62173811/article/details/126336422
Recomendado
Clasificación