Purge ram.sh
| 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).