Purger la cache mémoire RAM d’un Serveur linux.

Dans certains cas il peut être utile de vider la cache en mémoire RAM de votre serveur Linux, ça peut libérer jusqu’à 70% de mémoire Vive.

Pour forcer le noyau à abandonner la page de cache, inode dentry caches sans redémarrage.

Il s’agit d’une opération non-destructive. Dirty objets ne sont pas freeable, par conséquent, vous devez exécuter la synchronisation vers le disque dur au préalable. Pour cela il faut d’abord être sur que toutes les écritures disques en caches soit écritent, avec la commande SYNC

si vous utilisez Ubuntu dans un terminal tapez :

sudo su

Ecriture de la cache disque,  dans un terminal tapez :

sync

Puis on vas purger la pagecache de la  mémoire RAM dans un terminal tapez :

echo "1" > /proc/sys/vm/drop_caches

Puis on vas purger dentries libre et les inodes de la  mémoire RAM dans un terminal tapez :

echo "2" > /proc/sys/vm/drop_caches

Ou on peut aussi puger les deux en même temps :  dans un terminal tapez :

echo "3" > /proc/sys/vm/drop_caches

Enfin remettre drop_caches par default

echo "0" > /proc/sys/vm/drop_caches 

Dernier Etape : Redemarrer les services Mysql et apache2 afin qu’il recréer leurs caches.

service apache2 restart
service mysql restart

Mise en garde: Toutes ces commandes fonctionnent uniquement en mode root

___________________________________________________________

Voici un script pour Purger la Cache Ram du Serveur

J’ai fait un tutoriel sur  le Script :

Avec un éditeur tapez :

#!/bin/bash
#!/bin/sh # La première ligne sert à spécifier quel shell tu veux excéuter. ici sh 

# Notice : pour executer un script il faut
# 1) changer ses droits pour devenir executable:  chmod 777 NomDuScrip.sh
# 2) puis l'executer : ./NomDuScrip.sh

##################################################
### Script de purge du cache de la mémoire RAM ###
##################################################

echo "sync : Ecrit la cache disque en cours"
sync
echo "ok"
echo "Vidage du cache de la memoire RAM niveau 3"
echo "3" > /proc/sys/vm/drop_caches
echo "Pause de 1 seconde"
sleep 1
echo "sync : re-ecrit la cache disque en cours (+ par sécurité, pas indispensable)"
sync
echo "action cache remis par defaut"
echo "0" > /proc/sys/vm/drop_caches
echo "Vidage du cache terminée."
echo "redemarre les services mysql pour recréer la cache c'est conseillé"
service mysql restart
echo "redemarre les services apache2 pour recréer la cache c'est conseillé"
service apache2 --full-restart
echo "******* Terminée ********"

Enregistrez-le sous le nom : PurgeRam.sh

Donnez les droits a l’execution du script dans un terminal

chmod 777 PurgeRam.sh

vous pouvez l’exécuter ou l’ajouter aux tâches planifiées.

__________________________________________________

Créer une tâche Planifiée vers 4H50 du matin

  • Démarrez Tâche Planifiées > Applications > Outils système > Tâches Planifiées
  • Cliquez sur Nouveau
  • Cliquez sur Une tâche lancée régulièrement
  • Saisissez une Description “Ma sauvegarde”
  • Commande : Précisez votre Script ou la ligne de commande :  ./Chemin/du/scrip/PurgeRam.sh
  • Expert saisissez : Minute 0 – Heure 7 – jour * – Mois * – jour de la semaine * = à 4H50 tous les jours
  • Ajouter et Valider
  • Voila Gnome-schedule a inséré pour vous la ligne cron
    50 4 * * * ./chemin/PurgeRam.sh

Vous pouvez Cliquez sur  Lance la tache Sélectionner + “Exécuter” pour tester la tache.

___________________________________________________________________

Ou  avec crontab  (Planificateur de tâche en ligne de commande )

(sans gnome-schedule), tapez :
crontab -e
insérez : 50 4 * * * ./chemin/PurgeRam.sh

Explication des instructions crontab sur wikipedia

 j’ai fait un tutoriel sur les taches Planifiées ici

12 réflexions sur “Purger la cache mémoire RAM d’un Serveur linux.

  1. Pour info ça ne sert absolument à rien car le cache ne sert qu’à une chose, rendre plus rapide les accès disque fréquents aux mêmes endroits. Si tu libères le cache tu forces Linux a aller les chercher sur le disque dur à nouveau ce qui ralentit le système.

    Si Linux manque de Ram, il purge de lui même la cache. C’est le principe du cache, il ne sert pas aux programmes et sert à rendre la ram inutilisés autre chose qu’un espace vide inutile. Le purge encore une fois ne sert à rien du tout ! Le cache n’est pas de la ram utilisée, c’est de la ram inutilisée mise à profit pour diminuer les accès disques.

    En tout cas ces commandes ont quand même une utilité. Celle de purger le cache pour ne pas fausser les benchmarks. Mais sinon leur intérêt n’est la que pour le débuguage du noyau.

    • j’ai un petit serveur qui sature souvent lors des sauvegardes Mysql , en utilisant cette commande juste avant de faire la sauvegarde j’ai réduit le temps de sauvegarde par 10 !

      idem sur un petit desktop dell qui sature dès que j’ai quelques applications ouvertes, il retrouve immédiatement de la vigueurs.

      j’ai cru comprendre que le Noyau 3.5 réglait justement ces problèmes de cache.. a tester.

      🙂

  2. Merci pour ce script ;o)

    Contrairement à ce que dit ElectronikHeart, vider le cache sert même sur des serveur de 16 Go qui sature au bout d’un moment et sature le swap.

    Je te fournis le script pour des personnes ayant une version un peu plus ancienne de Debian

    #!/bin/bash
    #!/bin/sh # La première ligne sert à spécifier quel shell tu veux excéuter. ici sh

    # Notice : pour executer un script il faut
    # 1) changer c’est droit pour devenir executable: chmod 777 NomDuScrip.sh
    # 2) puis l’executer : ./NomDuScrip.sh

    ##################################################
    ### Script de purge du cache de la mémoire RAM ###
    ##################################################

    echo « sync : Ecrit la cache disque en cours »
    sync
    echo « ok »
    echo « Vidage du cache de la memoire RAM niveau 3 »
    echo « 3 » > /proc/sys/vm/drop_caches
    echo « Pause de 1 seconde »
    sleep 1
    echo « sync : re-ecrit la cache disque en cours (+ par sécurité, pas indispensable) »
    sync
    echo « action cache remis par defaut »
    echo 0 > /proc/sys/vm/drop_caches
    echo « Vidage du cache terminée. »
    echo « redemarre les services mysql pour recréer la cache c’est conseillé »
    /etc/init.d/mysql restart
    echo « redemarre les services apache2 pour recréer la cache c’est conseillé »
    /etc/init.d/apache2 restart
    echo « ******* Terminée ******** »

  3. aykut dit :

    Ben justement, sur un serveur, on devrait pas mettre de cache 😉
    Du coup, avec les nouvelles versions du noyeau, plus aucun prob ‘

  4. sebastien dit :

    Bonjour, et merci pour ce truc que j’ai placé en /root et dans un crontab. Mon crontab n’accepte pas les commandes du type « service apache2 restart » ! je ne sais pas pourquoi, alors je mets « /etc/init.d/apache2 restart », et là, miracle, ca fonctionne !
    Merci encore.

  5. sebastien dit :

    J’ai cela, sur la ligne « 0 »> … et je ne sais pas quoi faire. Je ne peux même pas lancer cette instruction endehors du cron !

    action cache remis par defaut
    /root/PurgeRam.sh: ligne 22 : echo: erreur d’écriture : Argument invalide

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.