epelpad

Desmitificando el Load average

Escucharon hablar del load average? En criollo sería algo así como la carga promedio del equipo.

Les piqué la curiosidad, no? Entonces van a su shell más cercano y tipean:

$ uptime
15:50:09 up 327 days, 21:13, 47 users, load average: 0.27, 0.23, 0.19

Ahí está! Load average! Emm... 0.27? 0.23? 0.19? Es un porcentaje? Una cuenta? Un cálculo?

El load average es la cantidad de procesos que están encolados, calculados sobre un cierto período de tiempo.

El 0.27 es en un minuto
0.23 en 5 min
0.19 en 15 min.

Emm... sigue sin decirte nada, no? Proceso encolado?

Basicamente es un proceso que se bloqueó esperando algo para continuar ejecutandose. Tipicamente puede estar esperando...

A la CPU
EL acceso de Lectura/Escritura de un disco
Acceso a Lectura/Escritura de una red

Entonces un proceso bloqueado sería, por ejemplo, un proceso esperando que la cpu pueda procesarlo, u otro que está esperando a que el disco lo deje escribir. Quizás hasta es uno que necesita leer algo de internet pero la red está ocupada.

Qué significa un load average elevado? (O que el servidor tenga carga alta)

Ésto es una indicación de que la CPU no se banca el uso que le damos, o que algo está fallando, un disco, una partición, una placa de red...

Y cómo noto que el problema de mi máquina es la carga alta?

Tu máquina responde lento? Se le da por no responder? Tarda horas en hacer lo más simple? Probablemente estés ante un caso de high load average, a.k.a. alta carga.

Hey! Pará! Solucionamelo!

Heeey, que no me iba todavía. La carga alta puede deberse a varios factores. Veamos cómo detectarlos:

Usaremos un comando que se llama top y responde algo así:

$ top

Desmitificando el Load average

(Cuándo agregarán el tag de código así puedo hacer mis posts prolijitos????).

Continuando, la primera línea es la misma que haciendo uptime, tiempo desde el último booteo y load average.
La segunda especifica las tareas corriendose en la máquina, incluyendo las activas, las dormidas, las detenidas y las zombies.
Tercera línea, ésta nos puede dar una pauta para solucionar el problema. Indica los porcentajes de la(s) CPU(s) usada y en qué está siendo usada:

us: procesos iniciados por algún usuario.
sy: procesos iniciados por el sistema.
ni: procesos iniciados con prioridad especial (nice).
id: porcentaje sin usar (idle).
wa: procesos esperando para continuar (waiting).

Primera cosa a chequear:

Si el porcentaje de usuarios (us) o de sistema (sy) está constantemente en 90 y pico tirando a 100%, significa que la cpu que tenés te quedó chica para el uso que le estás dando a la máquina (o que tiene algún problema de performance).

Si en cambio el porcentaje alto es el de espera (wa), significa que la CPU está insumiendo MUCHO tiempo esperando que se ejecuten las operaciones de E/S (Entrada/Salida, o sea, lectura y escritura). Ésto significa que podés tener un disco que falla, una placa de red que no funciona bien, capaz las aplicaciones no tienen acceso a la información que necesitan a la velocidad que necesitan.

Para saber qué aplicaciones están causando carga, corremos el comando que lista los procesos corriendo en el sistema:

$ ps faux

unix

Fijate la columna STAT, que indica el estado del proceso. Los estados más comunes:or are:

* R - Running (ejecutandose)
* S - Sleeping (en pausa)
* D - Waiting for something (en espera)

Así que buscá algún proceso que esté en D, y empezá desde ahí a diagnosticar el problema.

Para hacer diagnósticos más completos, encontré éstas recomendaciones, aunque no los probé. Úsese bajo su propio riesgo:

* strace - rastrea lo que hace un programa.
* iostat - muestra la actividad del disco.
* bwmon - muestra la actividad de la red.

Fuente:
man top
man load
https://www.andymillar.co.uk/blog/index.php/2006/12/24/geekery/linux-load-average-explained/

10 comentarios - Desmitificando el Load average

hourus
Me encanto el post,
La verdad es que sabia la mitad de la info que me brindaba top.

Van 8 puntines y un favorito
takedown
Hacia tiempo no veia un post como la gente en esta categoría...
que vuelvan los lentos... heee digo..

mejor no digo nada, porque aporto 0.

excelente lo suyo
takedown
que gracias che!! a vos las gracias
Locutus
Lo que no entiendo es cual era el mito que estas desmitificando ??
Altmas5
(Cuándo agregarán el tag de código así puedo hacer mis posts prolijitos????).
Ya está el tag de code.
alto putty
Monsterguru
de lujo muy bueno. lo escuchaba hace rato y no sabia que carajo era... je muchas gracias!!!
Gerbini +1
Llego tarde, pero bueno... nunca dijiste cual es el límite tolerable del load average.

Está basado en la cantidad de procesadores que se dispone, un single core tendrá un límite tolerable de 1.00 (esto no quiere decir que este valor no pueda superarse, por ejemplo 1.22)
Un dual-core será 2.00, un quad-core será de 4.00, etc...

Es más fácil hacer la analogía de autos cruzando un puente:
- Si tenés un single-core, el puente sería de 1 carril.
- un valor 0.50 quiere decir que el tráfico está al 50% de capacidad
- un valor de 1.00 quiere decir que los autos van pegaditos uno tras otro
- un valor mayor a 1.00, hay cola de autos esperando para cruzar, mientras el resto sigue cruzando uno tras otro bien pegaditos.

Hay que estar atento a los valores de 5 y 15 minutos. Que nunca superen los límites tolerables. Esos son los indicadores de que el equipo está "forzado".
mokesaurio
Muchisimas gracias por tus post, amigo. Es muy clarificador.