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