Votre serveur Linux est (largement) doté d'assez de mémoire pour faire son travail mais, après quelques semaines (jours) d'utilisation, il commence à swapper…
La solution brutale est d'effectuer un reboot du serveur. Le résultat en terme d'utilisation de la mémoire est garanti mais cela entraîne l'interruption des services. Imparable ! À vous d'estimer les répercussions de cette interruption.
La manière “propre” serait d'analyser le mécanisme qui conduit à l'utilisation “excessive” de mémoire vive, conduisant le système à faire appel au swap. Il en découlera un tuning des applications et du système qui devrait éviter que la mémoire vive soit mal utilisée.
Entre ces deux extrêmes, un nettoyage manuel périodique de la mémoire permet de libérer de la mémoire sans entraîner d'interruption de service.
Une raison fréquente de consommation excessive est une mauvaise gestion dynamique des caches. Après un certain temps de fonctionnement, la mémoire est massivement consommée par des caches1). Vider ces caches permet alors de regagner de la mémoire vive.
# sync // s'assurer que toutes les écritures en attente ont bien été copiées sur disque
puis lancer une des commandes suivantes, en fonction de ce que l'on veut nettoyer
# echo 1 > /proc/sys/vm/drop_caches // pour libérer les seules pages (mémoire paginée) # echo 2 > /proc/sys/vm/drop_caches // pour libérer les seules dentries et inodes # echo 3 > /proc/sys/vm/drop_caches // pour libérer les pages, dentries et inodes
Voir notes de bas de page pour dentry2) et inode 3).
Une fois la mémoire vive nettoyée, on peut vider le swap (comprendre : transférer en mémoire le contenu du swap).
$ free
# swapoff -a # swapon -a