5/07/2012

Load average


¿Qué es eso de "load average" cuando ejecutamos el comando "top" o "uptime" en una consola?

$uptime
12:22:11 up 154 days, 4:57, 1 user, load average: 0.27, 0.23, 0.19

El load average es la cantidad de procesos que están encolados, calculados sobre un cierto período de tiempo (load average: 1min, 5min, 15min).

¿Qué es lo que bloquea al proceso?, pueden ser 3 factores:
  • CPU 
  • Lectura/Escritura de disco 
  • Lectura/Escritura de la red 

Entonces un proceso bloqueado sería:
  • A la espera que la CPU pueda procesarlo 
  • Está esperando a que el disco lo deje escribir. 
  • Necesita leer algo de la 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 aguanta el uso que le damos, o que algo está fallando (hardware), un disco (partición) o una tarjeta de red.

Diagnosticar el problema

El comando "top" nos muestra información sobre el estado actual de los procesos que están en ejecución, la tercera línea nos puede ayudar ya que nos informa el uso de la CPU:
  • 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).
Si el porcentaje de usuarios (us) o de sistema (sy) está constantemente en 90% o 100%, significa que la CPU no da abasto 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á consumiendo mucho tiempo esperando a que se ejecuten las operaciones de lectura/escritura. Ésto significa que puedes tener un disco que falla, una tarjeta de red que no funciona bien o el ancho de banda no es proporcional a lo requerido por las aplicaciones.

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


Hay que fijarse en la columna STAT, que indica el estado del proceso. Los estados más comunes son:
  • R - Running (ejecutandose) 
  • S - Sleeping (en pausa) 
  • D - Waiting for something (en espera) 

Así que busca algún proceso que esté en D, y empieza desde ahí a diagnosticar el problema. Para hacer diagnósticos más completos puedes ocupar los siguiente programas:
  • strace - rastrea lo que hace un programa. 
  • iostat - muestra la actividad del disco. 
  • bwmon - muestra la actividad de la red.