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.
ArtÃculos relacionados:
6 comentarios en Control de memoria RAM consumida por Apache en servidor web
Deja un comentario
Buscador
Mi foto aleatoria
Comentarios recientes
CategorÃas
- Aplicaciones (34)
- Deportes (5)
- Exponentcms (15)
- Firefox (4)
- FotografÃa (15)
- Hardware (17)
- HTML CSS JavaScript y PHP (14)
- Humor (7)
- Internet (36)
- Musica (27)
- Posicionamiento Seo (12)
- Programación (7)
- Scripting (7)
- Seguridad (27)
- Sin categorÃa (2)
- Sistemas operativos (7)
- SQL-Bases Datos (3)
- Varios (87)
- Virtualización (21)
Enlaces
Archivos
- agosto 2011 (1)
- junio 2011 (2)
- mayo 2011 (1)
- abril 2011 (3)
- marzo 2011 (1)
- febrero 2011 (1)
- diciembre 2010 (1)
- noviembre 2010 (1)
- julio 2010 (2)
- junio 2010 (2)
- mayo 2010 (4)
- abril 2010 (1)
- marzo 2010 (1)
- febrero 2010 (5)
- enero 2010 (4)
- diciembre 2009 (5)
- noviembre 2009 (9)
- octubre 2009 (4)
- septiembre 2009 (9)
- agosto 2009 (9)
- julio 2009 (20)
- junio 2009 (8)
- mayo 2009 (13)
- abril 2009 (12)
- marzo 2009 (13)
- febrero 2009 (18)
- enero 2009 (15)
- diciembre 2008 (14)
- noviembre 2008 (14)
- octubre 2008 (18)
- septiembre 2008 (7)
- agosto 2008 (8)
- julio 2008 (3)
- octubre 2007 (4)

Esto es un puto hack de la peor calaña
Un saludo,
Pedro
De momento es lo único que me sirve…porque el MaxServers, y el limitar los threads de apache…se los salta y crea hijos hasta que lo tumba…
En que ruta pongo ese archivo?
Se ejecuta sólo o tengo que estarlo ejecutando manualmente?
Gracias!
Samuel,
El script lo puedes poner en la ruta que quieras. No importa para nada. Luego lo puedes ejecutar manualmente y el script se queda corriendo en background y reiniciando el apache si cumple las condiciones preestablecidas.
tengo problemas con mi server que crea y crea y crea procesos y siempre acumula y nunca los finaliza…
probare que tal me va con este script. gracias por la información.
Una consulta extra, en mi caso, lo coloque en /etc/control_apache.sh
pero me da el siguiente error:
nohup: ignoring input and appending output to `nohup.out’
nohup: cannot run command `/etc/control_apache.sh’: Permission denied
[1]+ Exit 126 nice -n -19 nohup /etc/control_apache.sh
puede ser porque modifique el archivo? en mi caso apache es apache2 y reemplace la ruta por /etc/init.d/apache por etc/init.d/apache2
sera por eso? es que yo no tengo “apache” tengo “apache2″
y una ultima consulta… si quisiera agregar una tercer linea que diga que cuando falten 5 megas de memoria se reinicie… eso seria posible?
gracias y mil disculpas por las molestias