Purger le cache mémoire
| Fiche express | |
|---|---|
| Domaine | Gestion de la mémoire — cache disque (page cache) |
| Commande | echo 3 > /proc/sys/vm/drop_caches
|
| Contexte | Avant un benchmark reproductible ou un diagnostic mémoire précis — pas un réflexe de maintenance courante |
| Voir aussi | Mémoire (vue d'ensemble mémoire et réglages sysctl) |
Purger le cache mémoire force le noyau Linux à libérer le cache de pages (et éventuellement les caches d'inodes/dentries) sans redémarrer la machine, via l'interface /proc/sys/vm/drop_caches.
⚠️ Vider le cache n'améliore pas les performances en soi. Sous Linux, la RAM libre inutilisée est considérée comme du gaspillage : le noyau remplit automatiquement la mémoire disponible avec du cache disque (page cache) pour accélérer les lectures suivantes, et le libère de lui-même dès qu'une application en a besoin. Une purge manuelle ne fait que jeter ce cache pour le reconstruire ensuite à l'usage, avec un coût en I/O le temps qu'il se repeuple — c'est donc utile ponctuellement pour un test, jamais comme opération d'entretien régulière.
Quand purger le cache
- Avant un benchmark reproductible — pour repartir d'un cache « froid » et comparer des mesures dans les mêmes conditions d'un run à l'autre.
- Pour un diagnostic mémoire précis — pour vérifier la mémoire réellement disponible ou reproduire un comportement (paging, latence disque) sans que le cache ne masque le phénomène observé.
En dehors de ces deux cas, il n'y a pas de raison de purger le cache : une machine avec beaucoup de mémoire « occupée » par du cache (colonne buff/cache de free) n'est pas une machine en tension mémoire — voir Mémoire pour distinguer cache et mémoire réellement utilisée.
Purger le cache
sync # écrit sur disque les pages modifiées (dirty) en attente
echo 3 > /proc/sys/vm/drop_caches # purge le cache
Le sync avant la purge est important : drop_caches ne libère que les pages de cache propres (déjà synchronisées) ; sans sync préalable, les pages modifiées non écrites restent en mémoire et faussent le résultat.
Les trois niveaux
drop_caches accepte trois valeurs, à écrire dans /proc/sys/vm/drop_caches :
- 1 — libère le cache de pages (page cache) uniquement
- 2 — libère le cache réclamable d'inodes et de dentries (slab)
- 3 — libère les deux (équivalent à écrire successivement 1 puis 2)
Écrire une valeur ne fait que déclencher une purge ponctuelle : ce n'est pas un interrupteur qu'il faudrait « remettre à 0 » ensuite, écrire 0 n'a aucun effet et n'est pas nécessaire.
Script complet
#!/bin/bash
#
# Purge du cache mémoire (page cache + inodes/dentries)
# À réserver à un benchmark ou un diagnostic ponctuel — voir la mise en garde ci-dessus.
echo "sync : écriture du cache disque en cours"
sync
echo "Purge du cache mémoire (niveau 3 : pagecache + inodes/dentries)"
echo 3 > /proc/sys/vm/drop_caches
echo "Purge terminée."
Voir aussi
- Mémoire — vue d'ensemble mémoire (
free,vmstat,/proc/meminfo) et réglagessysctl vm.*