Reiniciar Apache y MySQL cuando la memoria está baja

Si tienes muchos tráfico o consultas a SQL que devoran memoria, seguro que eventualmente tu servidor se queda al borde de consumir el 100% de la memoria. Apache aumenta el uso del espacio compartido (swap) y MySQL comienza a tener paradas por esta carga y falta de memoria para completar procesos de forma ágil. Cuando esto sucede el disco duro empieza a funcionar como memoria haciendo que los procesos sean cada vez más lentos.

La RAM se consume día a día y la única forma de liberarla es un reinicio de servicios que podemos programar con un sencillo script que comprueba el porcentaje de memoria libre para determinar si hay o no que reiniciar el Apache y MySQL.

Este el script bash que podéis utilizar y donde debéis actualizar la forma de reiniciar Apache y MySQL, en este ejemplo está personalizado para Plesk.

#!/bin/bash

threshold=95 #porcentaje
total=$(free | grep "Mem:" | awk '{print $2}')
remaining=$(free | grep "Mem:" | awk '{print $4}')
current=$(echo "scale=0;100-$remaining * 100 / $total" | bc -l)

if [ $current -gt $threshold ]
then
 service httpd stop
 service mysqld restart
 service httpd start

 echo "Restarted apache and mysql on `date +'%Y-%m-%d %H:%M:%S'`. RAM utilization at ${current}%" \
 >> /var/log/apache_mysql_restarter.log
fi

Ahora solo tienes que poner el script en cron para que cada varias horas compruebe el estado de la memoria. Además tendrás un log para seguir e proceso, este log lo puedes rotar si lo deseas.

vía: KrazyWorks