Table of Contents

Comment effacer le cache de la mémoire RAM, la mémoire tampon et l'espace d'échange sous Linux

Comme tout autre système d'exploitation, GNU/Linux a implémenté une gestion de la mémoire efficace et même plus que cela. Mais si un processus ronge la mémoire et que l'on souhaite l'effacer, Linux fournit un moyen de vider ou d'effacer le cache RAM.

Vider le cache RAM

Chaque système Linux dispose de trois options pour vider le cache sans interrompre aucun processus ou service.

Effacer PageCache uniquement.

sync; echo 1 > /proc/sys/vm/drop_caches

Effacer les dentries et les inodes.

sync; echo 2 > /proc/sys/vm/drop_caches

Effacer le pagecache, les dentries et les inodes.

sync; echo 3 > /proc/sys/vm/drop_caches

Explication des commandes ci-dessus:

Lorsqu'on applique divers paramètres et qu'on souhaite vérifier s'il est réellement implémenté spécialement sur le benchmark étendu d'E/S, il faut peut-être vider le cache du tampon.

On peut supprimer le cache comme expliqué ci-dessus sans redémarrer le système, c'est-à-dire qu'aucun arrêt n'est requis.

Linux est conçu de telle manière qu'il regarde dans le cache du disque avant de regarder sur le disque. S'il trouve la ressource dans le cache, la requête n'atteint pas le disque. Si on nettoie le cache, le cache disque sera moins utile car le système d'exploitation recherchera la ressource sur le disque.

De plus, cela ralentira également le système pendant quelques secondes pendant que le cache est nettoyé et que chaque ressource requise par le système d'exploitation est rechargée dans le cache disque.

Automation 1

A titre d'exemple le script shell suivant permet d'effacer automatiquement le cache RAM tous les jours à 2 heures du matin via une tâche du planificateur cron:

Créer un script shell clearcache.sh et ajouter les lignes suivantes.

cat > /home/$LOGNAME/clearcache.sh <<'EOF
#!/bin/bash
# Remarque, on utilise "echo 3", mais il n'est pas recommandé en production d'utiliser plutôt "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"
EOF

Définir l'autorisation d'exécution sur le fichier clearcache.sh.

chmod 755 /home/$LOGNAME/clearcache.sh

Maintenant, on peut appeler le script chaque fois que l'on doit vider le cache RAM.

Maintenant, configurer un cron pour vider le cache RAM tous les jours à 2 heures du matin. Ouvrir crontab pour l'édition.

crontab -e

Ajouter la ligne ci-dessous, enregistrer et quitter pour l'exécuter:

0 2 * * * /home/$LOGNAME/clearcache.sh

Automation 2

Pour surveiller la quantité de mémoire disponible, avec une fréquence de 5 minutes, créer un script shell clearcache.sh et ajouter les lignes suivantes.

cat > /home/$LOGNAME/clearcache.sh <<'EOF'
#!/bin/bash
x="$(free | grep Mem | awk '{print $4/$2 * 100.0}')";x=$(echo "$x/1" | bc); if [[ $x -lt 5 ]]; then DISPLAY=:0 notify-send -u critical "Attention" "Mémoire disponible très faible";sync;echo 3 > /proc/sys/vm/drop_caches; fi
EOF

Définir l'autorisation d'exécution sur le fichier clearcache.sh.

chmod 755 /home/$LOGNAME/clearcache.sh

Maintenant, configurer un cron pour vider le cache RAM toutes les 5 minuste. Ouvrir crontab pour l'édition.

crontab -e

Ajouter la ligne ci-dessous, enregistrer et quitter:

*/5 * * * *  /home/$LOGNAME/clearcache.sh