Linux: Load average alta y CPU bajo

Hoy cuando revise uno de los servidores que mantengo quede sorprendido al ver lo siguiente: “load average: 116.04, 115.87, 115.40″. Inmediatamente busque si algun proceso estaba ocupando todo el microprocesador, pero me encontre con que este estaba totalmente “idle”.

Load Average Alto

Raro, no?. Resulta que unos cuantos procesos (115 para ser mas precisos) quedaron esperando tareas de entrada salida estando en estado “Dormidos ininterrumpibles” (uninterruptible sleep). Para listarlos se puede usar:

# top -b -n 1 | awk ‘{if (NR <=7) print; else if ($8 == “D”) {print; count++} } END {print “Total status D: “count}’

Al ejecutar el comando obtenemos:

Listado de procesos

Se trata de un script php que se ejecutaba en diferido y que a su vez utilizaba Xvfb. Aparentemente se tildo esta ultima herramienta lo que hizo que todos los procesos de php queden “uninterruptible sleeped”.

Este caso particular no afecto el buen funcionamiento del servidor (aunque el load average se vea terrible), sin embargo definitivamente que tendré que revisar el script php para que no siga causando el problema. Respecto a la solución, lo mas sencillo seria reiniciar el servidor ya que estos procesos no se pueden matar con el comando “kill”. Por supuesto que, generalmente, en servidores la alternativa de reiniciar no esta siempre disponible. En ese caso otra alternativa seria la de probar matar a los procesos padres, esto no sempre resulta, ya que es probable que los procesos queden “uninterruptible sleeped” incluso si sus padres estan muertos. Para intentarlo, busque el padre del proceso con el comando “ps -ef” y luego matelo con “kill -9 PIDDelPadre”.

Tags: ,

4 Responses to “Linux: Load average alta y CPU bajo”

  1. Adrian Says:

    Un “killall php” no te funcionaba tampoco?
    Tenias un php lanzado por root, ese era el padre?

  2. Federico Says:

    Por ahora no tengo mas esos procesos uninterruptible sleeped dando vuelta, y tampoco quiero hacerlos aparecer de vuelta para experimentar :P
    Si vuelve a ocurrir pruebo, pero no creo que pase nada ya que killall debe invocar al comando kill, y con este ultimo comando no había manera de terminarlos…
    Con padre me refiero al proceso padre, el PPID. La idea es que terminando el padre también se terminen esos procesos, pero igual hay veces que no funciona. Yo terminé reiniciando el servidor :)

  3. Adrian Says:

    Ahhhh, qué pasó? Llamaste al soporte de Arnet y les hiciste caso?
    :P

  4. Federico Says:

    Ja, después de 3 o 4 números de reclamos no me quedo otra que apagar, desenchufar todos los cables, volver a enchufar y volver a encender… La supuesta panacea que utiliza Arnet todo el tiempo.

Leave a Reply