Purge ram.sh

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Vidage du cache mémoire (page cache)
Fichier noyau /proc/sys/vm/drop_caches
Usage typique benchmarks, tests reproductibles — rarement utile en production
Voir aussi Vmstat · Bash

Script qui vide le cache disque (page cache) de la mémoire RAM via l'interface noyau /proc/sys/vm/drop_caches.

Script

#!/bin/bash

echo "Écriture du cache disque en attente (sync)"
sync

echo "Vidage du cache (pages + dentries + inodes)"
echo 3 > /proc/sys/vm/drop_caches

echo "Terminé."

drop_caches accepte trois valeurs, cumulables :

  • 1 — libère uniquement le cache de pages (page cache)
  • 2 — libère uniquement dentries et inodes
  • 3 — libère les deux (le plus courant pour un vidage complet)

sync avant l'écriture est nécessaire pour que les données en cache d'écriture soient d'abord poussées sur disque — sans ça, des données modifiées mais pas encore écrites pourraient être perdues par l'opération.

Correction importante : pas besoin de redémarrer les services

Le script d'origine redémarrait MySQL et Apache après le vidage du cache, en partant du principe que ces services « ont besoin » de recréer leur cache. C'est une idée reçue à corriger : vider le page cache ne demande aucun redémarrage de service. Le cache se reconstruit tout seul, de façon transparente, à la prochaine lecture des fichiers concernés — le noyau le repeuple automatiquement au fil des accès disque. Redémarrer des services de production juste après un drop_caches n'apporte rien et coupe le service pour rien.

Quand c'est réellement utile

drop_caches sert surtout à obtenir des mesures reproductibles — par exemple comparer un temps de lecture disque « à froid » (cache vide) et « à chaud » (cache rempli) lors d'un benchmark. En usage courant, le noyau Linux gère déjà le cache de façon optimale : il libère automatiquement les pages en cache dès qu'une application a réellement besoin de mémoire (le cache n'est jamais de la mémoire « perdue », c'est de la mémoire libre récupérable à la demande). Forcer un vidage manuel en production n'améliore généralement pas les performances et peut au contraire les dégrader temporairement (relecture disque nécessaire pour tout ce qui était en cache).

Voir aussi

  • Vmstat — observer l'utilisation mémoire (dont le cache) en temps réel
  • Bash — redirections, structure générale de script