Purger le cache mémoire

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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églages sysctl vm.*