Entendiendo los Promedios de Carga de Linux y Monitoreando el Rendimiento de Linux

En este artículo, explicaremos una de las tareas críticas de administración del sistema Linux: el monitoreo del rendimiento en relación con la carga del sistema/CPU y las cargas promedio.

Antes de continuar, comprendamos estas dos frases importantes en todos los sistemas tipo Unix:

  • Carga del sistema/Carga de CPU – es una medida de la sobre o subutilización de la CPU en un sistema Linux; el número de procesos que están siendo ejecutados por la CPU o en estado de espera.
  • Carga promedio – es la carga promedio del sistema calculada durante un período de tiempo dado de 1, 5 y 15 minutos.

En Linux, se cree técnicamente que la carga promedio es un promedio en ejecución de procesos en su cola de ejecución (kernel) etiquetados como en ejecución o no interrumpibles.

Tenga en cuenta que:

  • Todos, si no la mayoría, de los sistemas alimentados por Linux u otros sistemas tipo Unix mostrarán posiblemente los valores de carga promedio en algún lugar para un usuario.
  • A downright idle Linux system may have a load average of zero, excluding the idle process.
  • Casi todos los sistemas tipo Unix cuentan solo los procesos en los estados de ejecución o espera. Pero este no es el caso con Linux, incluye procesos en estados de suspensión no interrumpible; aquellos que esperan otros recursos del sistema como E/S de disco, etc.

Cómo monitorear la carga promedio del sistema Linux

Existen numerosas formas de monitorear la carga promedio del sistema, incluido el tiempo de actividad que muestra cuánto tiempo ha estado funcionando el sistema, el número de usuarios junto con las cargas promedio:

$ uptime

07:13:53 up 8 days, 19 min,  1 user,  load average: 1.98, 2.15, 2.21

Los números se leen de izquierda a derecha, y la salida anterior significa que:

  • la carga promedio durante el último 1 minuto es 1.98
  • La carga promedio durante los últimos 5 minutos es 2.15
  • la carga promedio durante los últimos 15 minutos es 2.21

Cargas promedio altas implican que un sistema está sobrecargado; muchos procesos están esperando tiempo de CPU.

Lo descubriremos en la siguiente sección en relación al número de núcleos de CPU. Además, también podemos usar otras herramientas conocidas como top y glances que muestran un estado en tiempo real de un sistema Linux en ejecución, además de muchas otras herramientas:

Comando Top

$ top
Display Running Linux Processes
top - 12:51:42 up  2:11,  1 user,  load average: 1.22, 1.12, 1.26
Tasks: 243 total,   1 running, 242 sleeping,   0 stopped,   0 zombie
%Cpu(s): 17.4 us,  2.9 sy,  0.3 ni, 74.8 id,  4.6 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8069036 total,   388060 free,  4381184 used,  3299792 buff/cache
KiB Swap:  3906556 total,  3901876 free,     4680 used.  2807464 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                        
 6265 tecmint   20   0 1244348 170680  83616 S  13.3  2.1   6:47.72 Headset                                                                                                                                        
 2301 tecmint    9 -11  640332  13344   9932 S   6.7  0.2   2:18.96 pulseaudio                                                                                                                                     
 2459 tecmint   20   0 1707692 315628  62992 S   6.7  3.9   6:55.45 cinnamon                                                                                                                                       
 2957 tecmint   20   0 2644644 1.035g 137968 S   6.7 13.5  50:11.13 firefox                                                                                                                                        
 3208 tecmint   20   0  507060  52136  33152 S   6.7  0.6   0:04.34 gnome-terminal-                                                                                                                                
 3272 tecmint   20   0 1521380 391324 178348 S   6.7  4.8   6:21.01 chrome                                                                                                                                         
 6220 tecmint   20   0 1595392 106964  76836 S   6.7  1.3   3:31.94 Headset                                                                                                                                        
    1 root      20   0  120056   6204   3964 S   0.0  0.1   0:01.83 systemd                                                                                                                                        
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                                                                                                       
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.10 ksoftirqd/0                                                                                                                                    
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H   
....

Herramienta Glances

$ glances
Glances – Linux System Monitoring Tool
TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic)                                                                                                                                               Uptime: 2:16:06

CPU      16.4%  nice:     0.1%                                        LOAD    4-core                                        MEM     60.5%  active:    4.90G                                        SWAP      0.1%
user:    10.2%  irq:      0.0%                                        1 min:    1.20                                        total:  7.70G  inactive:  2.07G                                        total:   3.73G
system:   3.4%  iowait:   2.7%                                        5 min:    1.16                                        used:   4.66G  buffers:    242M                                        used:    4.57M
idle:    83.6%  steal:    0.0%                                        15 min:   1.24                                        free:   3.04G  cached:    2.58G                                        free:    3.72G

NETWORK     Rx/s   Tx/s   TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat view
enp1s0     525Kb   31Kb
lo           2Kb    2Kb     CPU%  MEM%  VIRT   RES   PID USER        NI S    TIME+ IOR/s IOW/s Command 
wlp2s0        0b     0b     14.6  13.3 2.53G 1.03G  2957 tecmint      0 S 51:49.10     0   40K /usr/lib/firefox/firefox 
                             7.4   2.2 1.16G  176M  6265 tecmint      0 S  7:08.18     0     0 /usr/lib/Headset/Headset --type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF --lan
DISK I/O     R/s    W/s      4.9   3.9 1.63G  310M  2459 tecmint      0 R  7:12.18     0     0 cinnamon --replace
ram0           0      0      4.2   0.2  625M 13.0M  2301 tecmint    -11 S  2:29.72     0     0 /usr/bin/pulseaudio --start --log-target=syslog
ram1           0      0      4.2   1.3 1.52G  105M  6220 tecmint      0 S  3:42.64     0     0 /usr/lib/Headset/Headset 
ram10          0      0      2.9   0.8  409M 66.7M  6240 tecmint      0 S  2:40.44     0     0 /usr/lib/Headset/Headset --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=7,2
ram11          0      0      2.9   1.8  531M  142M  1690 root         0 S  6:03.79     0     0 /usr/lib/xorg/Xorg :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8
ram12          0      0      2.6   0.3 79.3M 23.8M  9651 tecmint      0 R  0:00.71     0     0 /usr/bin/python3 /usr/bin/glances
ram13          0      0      1.6   4.8 1.45G  382M  3272 tecmint      0 S  6:25.30     0    4K /opt/google/chrome/chrome 
...

Las cargas promedio mostradas por estas herramientas se leen del archivo /proc/loadavg, que puedes ver usando el comando cat como se muestra a continuación:

$ cat /proc/loadavg

2.48 1.69 1.42 5/889 10570

Para monitorear las cargas promedio en formato de gráficos, revisa: ttyload – Muestra un Gráfico Codificado por Colores de la Carga Promedio de Linux en la Terminal

En máquinas de escritorio, existen herramientas de interfaz gráfica de usuario que podemos utilizar para ver las cargas promedio del sistema.

Comprendiendo la Carga Promedio del Sistema en Relación al Número de CPUs

No podemos explicar la carga del sistema o el rendimiento del sistema sin arrojar luz sobre el impacto del número de núcleos de CPU en el rendimiento.

Multi-procesador Vs Multi-núcleo

  • Multi-procesador – es donde dos o más CPU físicas se integran en un único sistema informático.
  • Procesador multi-núcleo – es una única CPU física que tiene al menos dos o más núcleos separados (o lo que también podemos referirnos como unidades de procesamiento) que trabajan en paralelo. Significa que un dual-core tiene 2 unidades de procesamiento, un quad-core tiene 4 unidades de procesamiento y así sucesivamente.

Además, también hay una tecnología de procesador que fue introducida por Intel para mejorar la computación en paralelo, conocida como hiper-roscado.

Bajo el hiper-roscado, un solo núcleo de CPU física aparece como dos núcleos de CPU lógicos para un sistema operativo (pero en realidad, hay un solo componente de hardware físico).

Tenga en cuenta que un solo núcleo de CPU solo puede llevar a cabo una tarea a la vez, por lo tanto, se crearon tecnologías como múltiples CPUs/procesadores, CPUs multi-núcleo y hiper-roscado.

Con más de una CPU, varios programas pueden ejecutarse simultáneamente. Las CPUs Intel actuales utilizan una combinación de múltiples núcleos y tecnología de hiper-roscado.

Para encontrar el número de unidades de procesamiento disponibles en un sistema, podemos usar los comandos nproc o lscpu de la siguiente manera:

$ nproc
4

OR
lscpu

Otra forma de encontrar el número de unidades de procesamiento usando el comando grep como se muestra.

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

4

Ahora, para entender mejor la carga del sistema, haremos algunas suposiciones. Digamos que tenemos promedios de carga inferiores:

23:16:49 up  10:49,  5 user,  load average: 1.00, 0.40, 3.35
En un sistema de un solo núcleo, esto significaría:
  • La CPU estaba completamente (100%) utilizada en promedio; 1 proceso se estaba ejecutando en la CPU (1.00) durante el último 1 minuto.
  • La CPU estaba ociosa en un 60% en promedio; no había procesos esperando tiempo de CPU (0.40) durante los últimos 5 minutos.
  • La CPU estaba sobrecargada en un 235% en promedio; 2.35 procesos estaban esperando tiempo de CPU (3.35) durante los últimos 15 minutos.
En un sistema de doble núcleo, esto significaría:
  • Una CPU estaba 100% ociosa en promedio, una CPU estaba siendo utilizada; no había procesos esperando tiempo de CPU (1.00) durante el último 1 minuto.
  • Las CPUs estaban ociosas en un 160% en promedio; no había procesos esperando tiempo de CPU (0.40) durante los últimos 5 minutos.
  • Las CPUs estaban sobrecargadas en un 135% en promedio; 1.35 procesos estaban esperando tiempo de CPU (3.35) durante los últimos 15 minutos.

También te podría gustar:

  1. 20 Herramientas de Línea de Comando para Monitorizar el Rendimiento de Linux – Parte 1
  2. 13 Herramientas de Monitorización de Rendimiento de Linux – Parte 2
  3. Perf- Una herramienta de monitoreo y análisis de rendimiento para Linux
  4. Nmon: Analizar y monitorear el rendimiento del sistema Linux

En conclusión, si eres un administrador del sistema, las cargas altas son algo de lo que realmente preocuparse. Cuando son altas, por encima del número de núcleos de la CPU, significa una alta demanda para las CPUs, y cargas bajas por debajo del número de núcleos de la CPU nos dicen que las CPUs no se están utilizando completamente.

Source:
https://www.tecmint.com/understand-linux-load-averages-and-monitor-performance/