Control de memoria RAM consumida por Apache en servidor web

Como bien sabéis estoy teniendo problemas con el servidor y Apache. En ocasiones sin saber muy bien por qué apache crea tantos hijos que sobrecarga el servidor hasta consumir toda la RAM disponible. Cuando llega a ese punto Linux se encarga de matar los procesos menos prioritarios para liberar recursos. En este caso cuando llega ese punto mata todos los procesos apache y el servidor web se cae.

Para tratar de evitar este problema y consultando con google he preparado este script basándome en un artículo que he encontrado en chuano.net.:

#!/bin/bash
minram=200
extraminram=50
while true; do
        memusage=$(free -m | head -2 | tail -1 | awk {'print $4'})
        if [ "$memusage" -lt "$minram" ]; then
                /etc/init.d/apache reload
        fi
        if [ "$memusage" -lt "$extraminram" ]; then
                /etc/init.d/apache restart
        fi
 
        sleep 1
done

Este script lo he llamado control_apache.sh y tras darle los permisos de ejecución oportunos lo ejecuto de la siguiente forma:

# nice -n -19 nohup ./control_apache.sh &

De este modo el script se ejecuta con máxima prioridad y cuando el servidor se queda con menos de 200MB libres de RAM, recarga apache. Si por el contrario la RAM libre desciende a 50MB reinicia apache, matando así todos los hijos y liberando la RAM.

9 Comments

  1. Pedro 19 de Febrero, 2009
  2. Jonathan Echeverria 19 de Febrero, 2009
  3. Samuel 24 de Marzo, 2011
    • Jonathan Echeverria 24 de Marzo, 2011
  4. Yeow 28 de Marzo, 2011
  5. Yeow 28 de Marzo, 2011
  6. pablo 3 de Julio, 2012
  7. Jonathan Echeverria 4 de Julio, 2012
  8. Julio 28 de Marzo, 2014

Leave a Reply