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 :
free -h total used free shared buff/cache availableMem: 31Gi 2,6Gi 25Gi 13Mi 3,9Gi 28GiSwap: 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 :
cat /proc/meminfo
MemTotal: 32602704 kBMemFree: 26288324 kBMemAvailable: 29867396 kBBuffers: 511084 kBCached: 3327372 kBSwapCached: 0 kBActive: 2428520 kBInactive: 2735628 kBActive(anon): 1360220 kBInactive(anon): 0 kBActive(file): 1068300 kBInactive(file): 2735628 kBUnevictable: 286924 kBMlocked: 277288 kBSwapTotal: 8388604 kBSwapFree: 8388604 kBZswap: 0 kBZswapped: 0 kBDirty: 252 kBWriteback: 0 kBAnonPages: 1612900 kBMapped: 338740 kBShmem: 13832 kBKReclaimable: 246980 kBSlab: 503076 kBSReclaimable: 246980 kBSUnreclaim: 256096 kBKernelStack: 10592 kBPageTables: 34184 kBSecPageTables: 0 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 24689956 kBCommitted_AS: 3093216 kBVmallocTotal: 34359738367 kBVmallocUsed: 52864 kBVmallocChunk: 0 kBPercpu: 69200 kBHardwareCorrupted: 0 kBAnonHugePages: 0 kBShmemHugePages: 8192 kBShmemPmdMapped: 0 kBFileHugePages: 0 kBFilePmdMapped: 0 kBUnaccepted: 0 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kBHugetlb: 0 kBDirectMap4k: 351028 kBDirectMap2M: 16164864 kBDirectMap1G: 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
etSwapFree
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 :
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) :
sudo apt install htop # Debian/Ubuntusudo yum install htop # RHEL/CentOS
Puis lancer :
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 :
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) :
sudo apt install smem # Debian/Ubuntusudo yum install smem # RHEL/CentOS
Exemple d’utilisation :
smem PID User Command Swap USS PSS RSS665833 bob /bin/sh -c "/home/bob/.vsco 0 100 147 1848660525 bob /bin/sh 0 104 152 1916664457 bob sleep 180 0 108 155 2104665837 bob sleep 1 0 108 155 2104659818 bob sh /home/bob/.vscode-server 0 112 160 1924659759 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 :
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 :
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) :
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 :
sudo fallocate -l 1G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile
Pour rendre cette swap persistante :
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Désactiver temporairement la swap
sudo swapoff -a
Réactiver la swap
sudo swapon -a
Ajuster la swappiness
Pour modifier dynamiquement le comportement du noyau concernant l’utilisation de la swap :
sudo sysctl vm.swappiness=10
Cette commande définit la swappiness à 10 (très faible propension à swapper).
Pour rendre ce réglage permanent :
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 :
sudo apt install valgrind # Debian/Ubuntusudo yum install valgrind # RHEL/CentOS
Analyse basique :
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 :
==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 :
valgrind --tool=massif ./votre_programmems_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.