====== Mon serveur swappe sans raison ======
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.
===== Vider les caches =====
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 caches((En soi, c'est un excellent comportement du système. Tant qu'une partie de la mémoire vive est durablement inutilisée, autant s'en servir pour effectuer des opérations courantes, bien plus vite que si elles étaient réalisées sur disque.)). 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 //dentry//((A dentry is the glue that holds inodes and files together by relating inode numbers to file names. Dentries also play a role in directory caching which, ideally, keeps the most frequently used files on-hand for faster access. File system traversal is another aspect of the dentry as it maintains a relationship between directories and their files.)) et //inode// ((An inode exists in, or on, a file system and represents metadata about a file. For clarity, all objects in a Linux or UNIX system are files; actual files, directories, devices, and so on. Please note that, among the metadata contained in an inode, there is no file name as humans think of it, this will be important later. An inode contains essentially information about ownership (user, group), access mode (read, write, execute permissions) and file type.)).
Une fois la mémoire vive nettoyée, on peut vider le swap (comprendre : transférer en mémoire le contenu du swap).
S'assurer que la quantité de mémoire vive libre est suffisante((Si vous ne comprenez pas ce que cela signifie, mieux vaut vous arrêter là.)) pour recevoir les données présentes en swap. Sinon vous risquez d'endommager votre système.
$ free
# swapoff -a
# swapon -a