Dans le travail d’administration, il peut être utile de surveiller la mémoire disponible et de déclencher une action lorsqu’un seuil est atteint. La plupart des outils ne donnent pas une image réaliste de l’utilisation de la mémoire. Par exemple, si vous lancez la commande « top » sur un serveur, vous obtenez quelque chose comme ça :

Avec la commande « free », vous obtenez la même information :

On peut aussi faire le test sur une machine plus grosse :


Mais ces résultats ne reflètent pas vraiment la réalité, tout simplement parce que Linux aime les buffers et le cache. Si on utilise maintenant htop à la place de top ou de free, on obtient une autre information.
Sur la deuxième machine :


Pour déclencher une action lorsqu’il y a réellement un problème de mémoire, il faut donc récupérer la bonne information. On peut le faire en une ligne avec free, awk, print et sed :
free | awk 'FNR == 3 {print $4/($3+$4)*100-100}'| sed 's/-//g'
Exemple :

Il ne reste plus qu’à écrire un script shell pour surveiller ça et agir en cas de problème :
#!/bin/bash
# A simple shell script that take action when occupied memory reach a threshold
# Author : Christophe Casalegno
# https://twitter.com/Brain0verride
# https://www.christophe-casalegno.com
threshold1=80 # in percent for first reach point
threshold2=90 # in percent for second reach point
host=`hostname -f`
alert=alerte@nospam.com # Email for receiving alerts
logfile="/var/log/memory.log"
# Calculate real occupied memory in percent
realmem=`free | awk 'FNR == 3 {print $4/($3+$4)*100-100}'| sed 's/-//g' |cut -d "." -f1`
if [ "$realmem" -gt "$threshold1" ]
then
date=`date`
echo "The memory usage has reached $realmem% on $host" | mail -s "$host : High Memory Usage Alert" $alert
echo "$date : The memory usage has reached $realmem% on $host." >> $logfile
if [ "$realmem" -gt "$threshold2" ]
then
echo "The memory usage has reached $realmem% on $host" | mail -s "$host : Very High Memory Usage Alert" $alert
echo "$date : Alert T2 : The memory usage has reached $realmem% on $host." >> $logfile
# Put your own urgency commands here
fi
fi
J’utilise deux seuils, mais vous pouvez en mettre plus ou moins selon vos besoins. Il suffit ensuite de remplacer l’envoi d’emails et l’écriture dans les logs par les actions de votre choix, puis de mettre le script dans votre crontab.
Vous pouvez télécharger le script directement ici : memorycheck ou depuis votre serveur :
wget --no-check-certificate https://www.christophe-casalegno.com/tools/memorycheck.sh ; chmod +x memorycheck.shChristophe Casalegno
Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram | Youtube
1 commentaire