Aller au contenu

Commandes de gestion de la mémoire sous Linux

Mise à jour :

Surveiller la consommation mémoire sous Linux est une tâche clé pour tout administrateur système soucieux de la performance et de la stabilité des serveurs. Cette vigilance est d’autant plus essentielle dans une démarche GreenOps, qui vise à optimiser l’utilisation des ressources pour réduire l’empreinte écologique du numérique. Un suivi régulier permet non seulement de limiter la consommation énergétique inutile, mais aussi d’anticiper les incidents critiques liés aux saturations mémoire.

Fonctionnement de la gestion mémoire sous Linux

Linux repose sur une architecture mémoire avancée qui vise à maximiser les performances tout en garantissant la stabilité des systèmes. Pour bien comprendre les commandes d’analyse mémoire et optimiser vos serveurs, il est essentiel de connaître en profondeur les différents composants et mécanismes qui interviennent dans la gestion mémoire.

Gestion de la mémoire physique et virtuelle

La mémoire physique (RAM)

La mémoire physique est la RAM installée sur la machine. C’est la ressource la plus rapide pour stocker temporairement les données des processus en cours d’exécution. La mémoire vive est indispensable pour les performances : toute surcharge ou saturation ralentit considérablement le système. La capacité de la RAM fixe une limite physique stricte, mais Linux exploite des mécanismes pour contourner cette limite.

La mémoire virtuelle

Pour permettre une meilleure flexibilité, Linux utilise un système de mémoire virtuelle. Chaque processus bénéficie d’un espace d’adressage virtuel qui lui donne l’illusion d’avoir accès à toute la mémoire du système. Cette mémoire virtuelle est ensuite mappée à la mémoire physique via un mécanisme interne géré par le noyau. Ce découplage garantit :

  • L’isolation des processus (sécurité et stabilité)
  • La possibilité de dépasser la taille réelle de la RAM en utilisant la swap

Cette architecture permet d’optimiser l’utilisation de la mémoire physique et d’éviter les conflits entre processus.

La gestion des processus

Les tables de pages

Pour relier les adresses virtuelles des processus à la mémoire physique, Linux utilise des tables de pages. Chaque processus a sa propre table, qui décrit comment ses données virtuelles sont réellement stockées en mémoire physique. Le noyau consulte et met à jour ces tables en permanence :

  • Quand un processus alloue ou libère de la mémoire
  • Lorsqu’il y a des échanges entre RAM et swap

Ce système permet une gestion dynamique et granulaire de la mémoire, ce qui est indispensable pour garantir la performance même sous forte charge.

Gestion de la fragmentation

Pour éviter la fragmentation de la mémoire physique, Linux utilise différentes stratégies (allocation par zones, regroupement des petits blocs) afin d’optimiser l’espace mémoire et éviter que la mémoire soit inutilisable malgré des espaces encore disponibles.

Mécanismes d’optimisation : Buffers et caches

Le rôle des buffers

Les buffers sont des zones mémoire utilisées principalement pour les entrées/sorties. Lorsqu’un fichier est écrit sur le disque, Linux le place d’abord dans un buffer afin de regrouper les opérations et améliorer la performance des disques. Cette méthode :

  • Réduit les temps d’attente des processus
  • Diminue le nombre d’opérations physiques sur les disques

Le rôle des caches

Le cache, et notamment le page cache, est utilisé pour mémoriser les fichiers ou blocs récemment lus depuis le disque. Si un même fichier est de nouveau demandé, il peut être fourni directement depuis le cache en RAM, ce qui est beaucoup plus rapide. Ce mécanisme :

  • Diminue les accès disques répétitifs
  • Améliore les performances globales du système

Une particularité importante : la mémoire dédiée aux buffers et caches est réutilisable. Elle est affichée comme « utilisée » dans les outils d’analyse, mais elle est automatiquement libérée par le système si un autre processus en a besoin.

4. La swap : extension de la mémoire

Fonctionnement général

La swap est une zone du disque dur réservée pour compléter la mémoire vive lorsque celle-ci devient insuffisante. Linux y déplace les pages mémoire des processus qui sont moins actifs afin de libérer de la RAM pour les processus prioritaires. La swap est donc un tampon de sécurité qui permet d’éviter des erreurs système lorsque la mémoire physique est saturée.

Limites de la swap

L’accès disque étant des centaines de fois plus lent que l’accès à la RAM, l’utilisation de la swap entraîne un ralentissement notable des performances. Un recours trop fréquent à la swap est un indicateur clair que le système est sous-dimensionné en mémoire ou mal configuré.

5. Gestion des situations critiques : OOM Killer

Mécanisme de protection

Lorsque toute la mémoire (physique + swap) est saturée, Linux déclenche le OOM Killer (Out of Memory Killer). Ce mécanisme vise à éviter un blocage total du système en terminant un ou plusieurs processus pour libérer immédiatement de la mémoire. Le choix des processus à tuer repose sur plusieurs critères :

  • La quantité de mémoire utilisée
  • La priorité du processus (importance système)
  • La durée de vie du processus

L’objectif est de sacrifier les processus les moins critiques pour maintenir le système globalement fonctionnel.

Politique d’utilisation de la swap

Principe

La swappiness est un paramètre du noyau qui détermine la tendance du système à utiliser la swap avant que la RAM ne soit entièrement remplie. Sa valeur est comprise entre 0 et 100 :

  • 0 à 30 : utilisation minimale de la swap (idéal pour les serveurs qui doivent maximiser les performances RAM)
  • 60 à 100 : utilisation proactive de la swap pour libérer la mémoire vive plus rapidement

Pourquoi ajuster la swappiness ?

Selon la charge de votre serveur et le type d’applications hébergées, il peut être judicieux d’ajuster la swappiness. Par exemple :

  • Un serveur de bases de données profitera d’une faible swappiness pour éviter toute latence disque.
  • Un poste de travail ou un serveur multi-services pourra tolérer une swappiness plus élevée.

Aperçu global de la mémoire système

Pour obtenir une vision rapide et synthétique de l’état de la mémoire système, Linux propose plusieurs outils simples mais puissants. Ces commandes permettent de connaître la quantité de mémoire utilisée, libre, mise en cache ou en swap, et d’identifier d’éventuelles anomalies dès les premiers signes.

La commande free

La commande free est l’un des outils les plus utilisés pour consulter l’état global de la mémoire. Elle affiche plusieurs colonnes utiles :

  • total : la mémoire totale disponible sur le système
  • used : la mémoire actuellement utilisée
  • free : la mémoire totalement libre
  • shared : la mémoire partagée entre processus
  • buff/cache : la mémoire utilisée pour les buffers et caches
  • available : la mémoire réellement disponible pour de nouveaux processus

Exemple d’utilisation :

Terminal window
free -h
total used free shared buff/cache available
Mem: 31Gi 2,6Gi 25Gi 13Mi 3,9Gi 28Gi
Swap: 8,0Gi 0B 8,0Gi

L’option -h permet d’afficher les valeurs dans un format lisible (kB, MB, GB).

Le fichier /proc/meminfo

Pour des informations plus détaillées, Linux fournit le fichier /proc/meminfo, qui expose directement les statistiques de la mémoire via le système de fichiers virtuel /proc. Ce fichier contient des dizaines de lignes précisant l’état de chaque zone mémoire : la RAM, la swap, les buffers, les caches, etc.

Exemple d’utilisation :

Terminal window
cat /proc/meminfo
MemTotal: 32602704 kB
MemFree: 26288324 kB
MemAvailable: 29867396 kB
Buffers: 511084 kB
Cached: 3327372 kB
SwapCached: 0 kB
Active: 2428520 kB
Inactive: 2735628 kB
Active(anon): 1360220 kB
Inactive(anon): 0 kB
Active(file): 1068300 kB
Inactive(file): 2735628 kB
Unevictable: 286924 kB
Mlocked: 277288 kB
SwapTotal: 8388604 kB
SwapFree: 8388604 kB
Zswap: 0 kB
Zswapped: 0 kB
Dirty: 252 kB
Writeback: 0 kB
AnonPages: 1612900 kB
Mapped: 338740 kB
Shmem: 13832 kB
KReclaimable: 246980 kB
Slab: 503076 kB
SReclaimable: 246980 kB
SUnreclaim: 256096 kB
KernelStack: 10592 kB
PageTables: 34184 kB
SecPageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 24689956 kB
Committed_AS: 3093216 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 52864 kB
VmallocChunk: 0 kB
Percpu: 69200 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 8192 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
Unaccepted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 351028 kB
DirectMap2M: 16164864 kB
DirectMap1G: 16777216 kB

Chaque ligne de ce fichier correspond à une statistique mémoire spécifique. Voici les principaux champs à surveiller pour un diagnostic efficace :

  • MemTotal : C’est la quantité totale de mémoire physique disponible (en Ko). Elle vous donne la base de calcul pour comprendre la proportion de mémoire utilisée ou libre. À surveiller : vous pouvez la comparer aux autres valeurs pour détecter des anomalies ou des saturations.

  • MemFree : Représente la mémoire réellement libre (non utilisée par les processus ni par les caches). Elle est généralement faible, car Linux utilise au maximum la mémoire disponible pour les caches afin d’optimiser les performances. À surveiller : si cette valeur chute très bas en permanence, cela peut indiquer une pression mémoire élevée, mais ce n’est pas alarmant à elle seule.

  • Buffers : Mémoire utilisée par les tampons (buffers) pour les E/S de périphériques. À surveiller : utile pour comprendre combien de mémoire est temporairement mobilisée pour les écritures disque ; une valeur haute indique une activité disque soutenue.

  • Cached : Quantité de mémoire utilisée pour mettre en cache les fichiers lus. Cette mémoire est « librement réutilisable » : Linux la libère automatiquement si besoin. À surveiller : une valeur élevée est normale et signe que le système optimise les performances disque. Une chute brutale peut signaler une forte demande mémoire.

  • SwapTotal : Montre la taille totale de la swap configurée sur le système (en Ko). Cela vous permet de vérifier si la swap est bien présente et suffisante en cas de surcharge mémoire. À surveiller : absence ou taille trop faible sur un serveur exposé peut poser problème.

  • SwapFree : Affiche la quantité de swap encore disponible. Une diminution progressive montre que le système commence à utiliser la swap, ce qui peut entraîner des lenteurs. À surveiller : si cette valeur approche de zéro, c’est un signe d’alerte fort : le système est en danger de saturation mémoire, ce qui peut déclencher l’OOM Killer.

Bonnes pratiques de surveillance :

  • Ajouter MemAvailable : ce champ (présent sur les noyaux récents) donne une estimation plus précise de la mémoire réellement disponible pour de nouveaux processus, en tenant compte des caches qui peuvent être libérés rapidement.
  • Surveiller régulièrement la tendance : un pic temporaire n’est pas forcément grave, mais une baisse constante de MemFree et SwapFree doit alerter sur une possible saturation imminente.
  • Ne pas se fier uniquement à MemFree : Linux utilise la mémoire de manière proactive (pour des caches), donc ce chiffre est souvent bas même quand tout va bien.

En surveillant ces valeurs clés dans /proc/meminfo, vous obtenez une vision claire et détaillée de l’état de la mémoire, ce qui vous permet de prendre des mesures correctives avant que des incidents n’apparaissent.

Surveillance en temps réel

Pour surveiller en direct l’évolution de la consommation mémoire, Linux propose plusieurs outils interactifs qui affichent en temps réel les processus et leur impact sur les ressources système. Cela permet de détecter immédiatement les pics de charge ou les processus anormalement gourmands.

La commande top

La commande top fournit une vue en temps réel de l’état global du système. Elle affiche notamment :

  • La charge système
  • Le nombre de tâches en cours
  • L’utilisation de la mémoire et de la swap
  • La liste des processus, triés par activité

Exemple d’utilisation :

Terminal window
top

Dans la partie haute, vous verrez les lignes KiB Mem et KiB Swap, qui indiquent respectivement l’état de la RAM et de la swap. Les processus sont listés avec leur %MEM, soit le pourcentage de mémoire utilisée.

La commande htop

htop est une version plus ergonomique et colorée de top, qui permet notamment :

  • D’utiliser les flèches pour naviguer dans les processus
  • De trier dynamiquement les colonnes
  • D’envoyer des signaux (kill, stop) directement depuis l’interface

Pour l’installer (si absent) :

Terminal window
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # RHEL/CentOS

Puis lancer :

Terminal window
htop

Vous verrez en haut de l’écran des barres de mémoire et de swap, plus lisibles que dans top. L’utilisation mémoire par processus est indiquée clairement, facilitant l’identification d’un service consommateur.

Plus d’infos sur htop

Analyse des processus spécifiques

Lorsque la mémoire d’un système commence à se remplir, il est crucial d’identifier rapidement quels processus consomment le plus de ressources. Linux fournit plusieurs commandes pour obtenir ces informations de façon précise.

La commande ps

La commande ps permet d’afficher la liste des processus en cours avec des informations détaillées. Pour trier la liste par utilisation mémoire décroissante, on utilise :

Terminal window
ps aux --sort=-%mem | head -n 10

Explication des colonnes clés :

  • USER : l’utilisateur qui exécute le processus
  • %MEM : pourcentage de mémoire physique utilisée par le processus
  • VSZ : taille virtuelle du processus (en Ko)
  • RSS : mémoire physique occupée (en Ko)

Cette commande est très utile pour repérer immédiatement les processus gourmands.

La commande smem

smem va plus loin que ps en affichant des statistiques mémoire plus précises, notamment le Proportional Set Size (PSS) qui donne une estimation réaliste de la mémoire réellement utilisée par un processus (en tenant compte des pages partagées).

Installation (si besoin) :

Terminal window
sudo apt install smem # Debian/Ubuntu
sudo yum install smem # RHEL/CentOS

Exemple d’utilisation :

Terminal window
smem
PID User Command Swap USS PSS RSS
665833 bob /bin/sh -c "/home/bob/.vsco 0 100 147 1848
660525 bob /bin/sh 0 104 152 1916
664457 bob sleep 180 0 108 155 2104
665837 bob sleep 1 0 108 155 2104
659818 bob sh /home/bob/.vscode-server 0 112 160 1924
659759 bob sh 0 156 204 1968

Cette commande affiche plusieurs colonnes :

  • USS : mémoire unique à un processus
  • PSS : mémoire partagée proportionnelle
  • RSS : mémoire physique totale utilisée

Grâce à ces outils, vous pouvez non seulement identifier les processus les plus consommateurs, mais aussi comprendre la nature de cette consommation (mémoire partagée, privée), ce qui aide à prendre des décisions éclairées pour optimiser la charge système.

Statistiques de performance

Pour aller au-delà des simples relevés de mémoire, Linux propose des outils permettant d’analyser en profondeur le comportement global du système sur la durée. Ces statistiques donnent une vision claire de l’évolution des ressources mémoire et permettent de diagnostiquer des problèmes latents.

La commande vmstat

La commande vmstat (Virtual Memory Statistics) fournit un tableau synthétique qui détaille :

  • Les processus
  • La mémoire
  • La swap
  • Les entrées/sorties
  • Le CPU

Lancer la commande toutes les 5 secondes :

Terminal window
vmstat 5

Colonnes clés :

  • r : nombre de processus en attente d’exécution
  • free : mémoire libre
  • buff : mémoire tampon
  • cache : mémoire en cache
  • si/so : swap in/out (quantité de mémoire échangée avec la swap)

vmstat est idéal pour repérer les pics soudains ou les comportements anormaux liés à la swap.

La commande sar

sar (System Activity Reporter) collecte des statistiques sur les performances du système. Il permet de suivre l’évolution de la mémoire à intervalles réguliers et de générer des rapports historiques.

Exemple de commande pour afficher l’utilisation mémoire toutes les secondes pendant 3 cycles :

Terminal window
sar -r 1 3

Colonnes utiles :

  • kbmemfree : mémoire libre
  • kbmemused : mémoire utilisée
  • %memused : pourcentage de mémoire utilisée
  • kbbuffers/kbcached : mémoire pour les buffers et le cache
  • kbswpfree/kbswpused : état de la swap

sar est particulièrement intéressant dans un contexte d’audit ou pour mettre en place une surveillance automatisée.

Ces deux outils apportent des métriques fiables et détaillées pour comprendre la dynamique mémoire de votre système, qu’il soit sous légère ou forte charge.

Gestion pratique de la mémoire

Au-delà de l’analyse, il est parfois nécessaire d’agir directement sur la mémoire système pour libérer des ressources ou ajuster le comportement du noyau. Linux fournit plusieurs mécanismes pour gérer efficacement la mémoire en fonction des besoins.

Libérer les caches avec drop_caches

Le noyau Linux conserve des caches (buffers, page cache) pour améliorer les performances. Ces zones sont automatiquement libérées en cas de besoin, mais il peut être utile, dans certains cas spécifiques (tests de performance, libération immédiate), de forcer leur nettoyage.

Commande pour vider tous les caches (pagecache, dentry, inode) :

Terminal window
sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
  • sync : force l’écriture des buffers sur disque avant la libération
  • echo 3 : indique au système de vider le page cache (1), les dentry et inode (2)

Gestion des fichiers swap

Créer un fichier swap

Si la mémoire devient insuffisante, vous pouvez ajouter de la swap sous forme de fichier :

Terminal window
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Pour rendre cette swap persistante :

Terminal window
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Désactiver temporairement la swap

Terminal window
sudo swapoff -a

Réactiver la swap

Terminal window
sudo swapon -a

Ajuster la swappiness

Pour modifier dynamiquement le comportement du noyau concernant l’utilisation de la swap :

Terminal window
sudo sysctl vm.swappiness=10

Cette commande définit la swappiness à 10 (très faible propension à swapper).

Pour rendre ce réglage permanent :

Terminal window
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

Ces actions permettent de piloter précisément la gestion mémoire, en adaptant les réglages à la charge du système et aux besoins métiers, afin de garantir performance et stabilité.

Analyse approfondie des programmes

Pour détecter des fuites mémoire ou des erreurs d’allocation dans un programme spécifique, Linux propose l’outil incontournable : Valgrind.

Détecter les fuites mémoire avec Valgrind

Valgrind permet de surveiller :

  • Les fuites mémoire
  • Les erreurs d’allocation/libération
  • Les accès mémoire invalides

Installation :

Terminal window
sudo apt install valgrind # Debian/Ubuntu
sudo yum install valgrind # RHEL/CentOS

Analyse basique :

Terminal window
valgrind --leak-check=full ./votre_programme

Options utiles :

  • --track-origins=yes : affiche l’origine des erreurs
  • --log-file=rapport.log : sauvegarde le rapport

Exemple de détection :

Terminal window
==1234== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1

Profil mémoire avec Massif

Pour mesurer l’évolution de la consommation mémoire :

Terminal window
valgrind --tool=massif ./votre_programme
ms_print massif.out.<pid>

Valgrind est essentiel pour maintenir des programmes robustes et sans fuite mémoire.

Plus d’infos sur Valgrind (En cours de rédaction)

Le site semble momentanément indisponible, ce qui empêche d’accéder directement à l’article pour en consulter le contenu précis. Cependant, je peux rédiger une conclusion optimisée en intégrant une référence vers cet article de manière pertinente, basée sur le contexte général des bonnes pratiques d’optimisation des performances sous Linux.

Conclusion

Surveiller et gérer la mémoire sous Linux est indispensable pour maintenir des serveurs stables, performants et alignés avec une démarche GreenOps. Grâce aux outils détaillés dans ce guide – de free à Valgrind, en passant par vmstat et les mécanismes de nettoyage mémoire – vous disposez désormais des clés pour anticiper les saturations, diagnostiquer rapidement les anomalies et ajuster vos systèmes en fonction des besoins réels.

Mais la mémoire n’est qu’un aspect des performances globales. Pour aller plus loin et comprendre comment optimiser en profondeur la performance de vos serveurs Linux, notamment face aux phénomènes de contention mémoire ou aux limitations système, je vous invite à lire mon article détaillé : Optimisation des performances Linux : gérer la contention mémoire.

Ce complément vous permettra d’acquérir une vision complète et de mettre en place une stratégie proactive pour garantir à vos infrastructures des performances durables.