Guillaume Fenollar DevOps et SysAdmin Freelance

Guillaume FENOLLAR

Ingénieur Linux/DevOps Indépendant

− Montpellier −

Introduction à la consommation de memoire vive sous Linux

La RAM utilisée sert à stocker les informations et le code nécessaires aux programmes pour être fonctionnels. Un processus en marche utilise tout le temps de la mémoire vive, autant de mémoire qui n'est pas utilisable par d'autres processus, bien évidemment.

La mémoire sous Linux

Sous Linux, le système met à jour le fichier /proc/meminfo, que vous pouvez consulter librement. Les commandes que nous verront plus tard, telles que “free” ou “vmstat” utilisent ce même fichier pour peupler son output. Mais là où il devient plus compliqué à suivre, c’est qu’il ne pense pas simplement en binaire (mémoire utilisée / non utilisée). Il utilise des mécanismes de buffers et de mémoire cache, et ces trois types de mémoire constituent la mémoire utilisée. Et ce qui reste est la mémoire disponible. Pour autant, la mémoire cache n’est pas ce que le commun des mortels appellerait de la mémoire “utilisée”, voila pourquoi les débutants sont souvent perdus dans cet amas de chiffres qui s’entremêlent.

Le mieux, pour comprendre tout ça est encore d’analyser les resultats retournés par une commande.

La commande free

free dresse donc un rapport concis de la conso mémoire du système, mais encore faut-il savoir le lire et l’analyser. Mais vous inquiétez pas, ce sera facile pour vous d’ici quelque minutes! Tout d’abord, commencez par prendre la bonne habitude d’afficher les variables en mégabytes, et votre cerveau vous dira merci. À noter que vous retrouver ces exactes lignes implémentés dans le résultat de la commande “top”.

free -m → Affiche la consommation mémoire en mégaoctets.

consommation memoire vive linux

  1. Buffers & Cache : On réunit souvent ces deux appellations par simplification. La plupart du temps on parle de “Buffer cache” sans distinction, mais voici tout de même, en très simplifié la différence :
  • Cached : Espace en mémoire gardant le contenu des fichiers récemment consultés, pour une utilisation bien plus rapide lors d’un nouvel accès. En général, le système n’hésite pas à consommer des gigaoctets de cache, et restructure cette utilisation quand il a besoin de mémoire pour les besoins d’un processus.
  • Buffers : Espace cache similaire au Cache, mais relatif aux “blocs” cette fois-ci (et non pas seulement les fichiers). Il contient donc en plus, les méta informations telles que les permissions. Par exemple, si vous utilisez la commande “du” pour calculer la taille d’un gros dossier (commande qui prend du temps), l’information y sera stockée et c’est donc pour ça que si vous relancez la même commande, le résultat sera cette fois-ci immédiat.
  1. Récapitulatif : La vue d’ensemble peut faire peur aux débutants car elle montre souvent une valeur de mémoire libre (free) très basse. Pourtant, il faut bien comprendre que pour le système, de la mémoire Cache n’est pas “libre”, vu qu’il l’utilise. Du coup, pour se faire une idée rapide de l’état de santé de la mémoire du système, il est plus malin de regarder la ligne d’après :
  2. -/+ buffers/cache : Cette ligne est la résultante de deux simples opérations. La mémoire réellement utilisée est donc la mémoire utilisée moins les buffers et cache (4541=5626-1065-19), et la mémoire libre est donc la mémoire réellement libre, auquel on ajoute la mémoire cache. C’est donc ce dernier chiffre qui vous intéresse le plus parmi tous ces résultats, étant donné que la mémoire cache peut être libérée en cas de besoin. Si vous ne devez regarder qu’un seul nombre, c’est celui-là.
  3. Swap : Le Swap, ou mémoire paginée, est une méthode ancienne utile aux systèmes ayant peu de mémoire RAM. J’en parle juste après, et les valeurs affichées ici n’ont pas de piège particulier à savoir.

La mémoire Swap

Il s’agit là en effet d’un mécanisme présent sur tous les systèmes, mais plus visible sur Linux, car une partition dédiée est créée pour son usage sur la grande majorité des systèmes. Cependant, il s’agit là d’une chose bien optionnelle si vous avez un ordinateur/serveur avec beaucoup de mémoire vive. Dans le cas de ma configuration à 6 gigaoctets de RAM, il y a en effet peu de chance que le Swap ait une réelle utilité. Je m’explique.

Le Swap est un espace sur disque utilisé quand le système ne trouve plus assez de mémoire vive libre pour faire fonctionner les processus de manière optimale. Il va donc paginer sur disque et non plus dans une mémoire flash, ce qui aura comme résultante d’abaisser les performances du système, vu que les informations en Swap seront en général lues 1000 fois moins vite. Plus il y a d’informations couramment demandées en Swap, plus le système va ramer, jusqu’à ce que de la place soit faite sur le système pour remettre ces informations en mémoire vive.

Après, avoir un espace Swap utilisé dans l’ordre de quelque centaines de mégaoctets n’est pas une fatalité et n’est pas grave, à partir du moment où le système dispose d’assez de mémoire vive, et laisse ces fichiers là où ils sont de son plein gré. Ajouter et enlever des fichiers du Swap est coûteux pour le système, et si celui-ci les utilise pas, il pourra décider de tout simplement ne pas y toucher.

Le Swap peut à la fois être utilisé via une partition (certains installateurs en obligent l’installation), ou simplement via un simple fichier sur la partition courante. Tout ceci a plus un intérêt éducatif que pratique, mais voici quelque commandes intéressantes.

dd if=/dev/zero of=/monSwap bs=1024 count=524288 → Crée un fichier de 512Mo remplis de zeros qui va nous servir de fichier swap.
mkswap /monSwap → Transforme ce fichier inutilisable en fichier Swap tout beau tout neuf. Il est conseillé de rendre le fichier accessible que par root.
swapon /monSwap → Active cet espace swap pour qu'il soit utilisable par le système immédiatement si besoin.

Vue d’ensemble

Linux utilise la mémoire vive à sa disposition pour faire tourner les applications qui le demandent (la conso mémoire d’une appli est à étudier au cas par cas), et au lieu de laisser le reste inutilisé, en profite pour améliorer la performance globale du système, via des mécanismes de cache. Cette mémoire cache est utilisée jusqu’à ce que cet espace soit demandé par une application un peu trop gourmande.

Si, même après la suppression de ce cache, le système ne dispose toujours pas d’assez de mémoire pour tout ce qu’il a besoin, il va piocher dans l’espace Swap. Des algorithmes codés par des gens très intelligents s’occupent de décider ce qui est le plus important, et ce qui profitera le plus aux performances du système. Si l’espace Swap ne devient pas suffisant (À ce niveau là, le système commence à ne plus ressembler à rien, il rame comme pas possible), il ira jusqu’à forcer l’arrêt de certaines applications, pour le bien commun. Je ne saurai pas dire comment il considère qu’une application est plus importante qu’une autre à ce niveau là. À vous de me dire si vous avez eu l’audace de jeter un œil au code source! ;-)