Control de carga automático para servidores dedicados

Llevaba algunas semanas con problemas en uno de mis servidores dedicados, cada varias horas y sin explicación alguna la carga subía y se quedaba sin memoria, pero el servidor no está sobrecargado, se saturaba sin más.

Para solucionar este tipo de problemas en servidores dedicados hay que controlar la carga del servidor y procesos del servidor web para si es necesario y la carga es elevada realizar un reinicio forzado del servidor web.

La mejor opción es comprobar la carga del servidor (load average) con este script en bash que puede adaptar y mejorar si lo deseas, ayudándote con efecto menéame o digg.

#!/bin/bash
loadavg=`uptime | awk '{print $10}'`
RESTART="service httpd restart"
# bash doesn't understand floating point
# so convert the number to an interger
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`
if [ "$thisloadavg" -ge "8" ]; then
echo "Busy - Load Average $loadavg ($thisloadavg) "
httpd -k stop
elif [ "$thisloadavg" -le "2" ]; then
echo "Okay - Load Average $loadavg ($thisloadavg) "
pgrep httpd
if [ $? -ne 0 ] # if apache not running
then
# restart apache
$RESTART
echo "restart!"
else
echo "no restart!"
fi
else
echo "waiting...! $loadavg ($thisloadavg)"
fi

Guarda este código por ejemplo como /root/checkload.sh

Ahora lo único que tenemos que hacer es añadir un tarea programada o cron en nuestro servidor linux.

*/1 * * * * root sh /root/checkload.sh

Yo tengo puesto el cron cada 10 minutos, en el ejemplo lo hemos puesto para que cada minuto compruebe la carga del servidor por si es muy elevada y es necesario reiniciar el servidor web.

Espero que este script os resulte útil para vuestro servidor web.

vía: zedomax

  • Me parece interesante. Voy a intentar mejorarlo con un log que guarde en que circunstancias se ha producido el reinicio y si puede ser con información detallada de que procesos estaba ejecutando el servidor web en ese momento.:
    date >> /var/log/httprestart.log
    ps aux | grep http >> /var/log/httprestart.log

  • Esto solucionaría la caída del servidor cuando se satura de conexiones http?? ahorraría tener que reiniciarlo a través del drag o contactando con soporte??

    me estoy iniciando en el mundo de los servidores, asique perdonar si hesoltado alguna burrada..jeje

    Un saludo.

  • David, yo lo pondría despues del “#restart apache”, justo antes de llamar al reinicio del servidor.

    De esa forma podremos averiguar que procesos tenía en marcha el servidor antes de reiniciarse y cuantas veces se ha tenido que reiniciar.

    Si vemos que son muchas es que algo tenemos mal en la configuración o de programación.