Linux / Commande free : comprendre la RAM, le cache et le swap
free est une commande qui fournit un résumé de l'utilisation de la mémoire vive (RAM, Random Access Memory) et du swap, l’espace d’échange sur un système Linux. Lors de la détermination du manque de mémoire, il est préférable de vérifier d'abord la colonne available, qui estime la quantité pouvant être utilisée pour démarrer de nouveaux programmes sans recourir au swap, plutôt que de prendre la colonne free au pied de la lettre.
Linux utilise la RAM inutilisée pour des choses comme la mise en cache des fichiers et la récupère lorsque c'est nécessaire. Par conséquent, vous ne devriez pas conclure que la mémoire est faible simplement parce que la valeur free est petite et que buff/cache est grande.
Informations affichées par la commande free
free lit /proc/meminfo fourni par le noyau pour calculer des informations sur la mémoire physique et le swap. Les définitions de chaque colonne et des options peuvent être trouvées dans le manuel de free fourni par procps et publié par Debian.
free -h
Ces commandes de lecture nécessitent Linux avec procps installé ; elles ne modifient ni le cache ni le swap. Utilisez free --version pour identifier votre version. Si la commande manque, recherchez le paquet procps ou procps-ng de votre distribution.
Une sortie typique ressemble à ce qui suit. Les valeurs sont des exemples, et le format d'affichage peut varier selon le système et la version de procps-ng.
total used free shared buff/cache available
Mem: 15Gi 5.0Gi 1.1Gi 320Mi 9.7Gi 10Gi
Swap: 2.0Gi 128Mi 1.9Gi
Comprendre la signification de chaque colonne
total, used et free
| Colonne | Signification | Interprétation |
|---|---|---|
total |
Mémoire physique totale utilisable | Elle peut ne pas être exactement identique à la RAM installée totale. Les zones réservées par le noyau et le matériel sont exclues. |
used |
Mémoire qui est utilisée ou non immédiatement disponible | Actuellement, procps-ng la calcule comme total - available de mémoire physique. La méthode de calcul a pu différer selon la version. |
free |
Mémoire qui n'est utilisée à aucune fin | N'inclut pas la mémoire utilisée comme cache pouvant être récupérée. |
shared et buff/cache
shared représente principalement la mémoire utilisée dans tmpfs, un système de fichiers utilisant la mémoire virtuelle. buff/cache est la somme des tampons du noyau, du cache de pages et de la mémoire récupérable des caches d’objets du noyau, appelés slabs.
Le cache stocke les données lues depuis le disque dans la RAM pour permettre un réaccès plus rapide. Si une application a besoin de mémoire, le noyau peut la récupérer, donc avoir un grand cache n'est pas problématique en soi.
Pourquoi la colonne available est importante
available est une valeur estimée de la mémoire qui peut être utilisée pour démarrer de nouvelles applications sans utiliser le swap. Elle n'ajoute pas simplement free + buff/cache, mais utilise les informations MemAvailable du noyau, qui prennent en compte le cache des pages et une partie du slab récupérable.
Cette estimation, décrite dans la documentation du noyau sur /proc/meminfo, n’est pas une garantie absolue de l'utilisation future de la mémoire. Si une application demande soudainement une grande quantité de mémoire ou si le noyau a des difficultés à récupérer de la mémoire, la situation peut changer rapidement.
Différence entre les lignes Mem et Swap
Ligne de mémoire physique
La ligne Mem résume la taille totale et l'utilisation de la RAM réelle. Elle inclut diverses utilisations telles que la mémoire des applications, le noyau, le cache et la mémoire partagée.
Ligne de swap
Swap montre la capacité totale, utilisée et libre de la zone de swap, pas de la RAM. Vous ne pouvez pas en conclure qu'il y a actuellement une pénurie de mémoire simplement parce que l'utilisation du swap n'est pas à 0. En effet, les pages inactives qui ont été précédemment poussées peuvent rester dans le swap même après la disponibilité de la RAM.
Inversement, si l'utilisation du swap continue d'augmenter, et que si et so dans vmstat se produisent continuellement, et que le temps de réponse s'aggrave, une pression sur la mémoire devrait être suspectée.
vmstat 1
Options fréquemment utilisées
Afficher en unités lisibles par l'homme
free -h
-h ou --human sélectionne automatiquement les unités binaires comme Ki, Mi, Gi selon la valeur. Si une unité fixe est nécessaire, vous pouvez utiliser -m, -g, etc.
free -m
free -g
Afficher les tampons et le cache séparément
free --wide
-w ou --wide sépare buff/cache dans les colonnes buffers et cache. Pour analyser la cause détaillée, vous devriez également regarder /proc/meminfo, slabtop, et d'autres.
Affichage répété à intervalles réguliers
free -h -s 2
-s 2 affiche continuellement les résultats toutes les 2 secondes. Pour imprimer seulement un nombre défini de fois, utilisez -c en même temps.
free -h -s 2 -c 5
Afficher la mémoire physique totale et le swap
free -h --total
-t ou --total ajoute une ligne de total. Comme la RAM et le swap ont des performances et des rôles différents, ne pas interpréter le total seul comme la mémoire rapide réellement disponible.
Comment déterminer une pénurie de mémoire
Observer available et les entrées/sorties du swap
Il vaut mieux observer les signaux suivants plutôt qu'un seul résultat free.
- Si
availablecontinue d'être inférieur à la normale - Si l'utilisation du swap augmente
- Si
sietsodansvmstatapparaissent continuellement - Si le temps de réponse du service et les entrées/sorties (E/S) sur disque se détériorent ensemble
- S'il existe des enregistrements de fin OOM (Out of Memory) dans le journal du noyau
free -h
vmstat 1 5
journalctl -k --case-sensitive=no -g 'oom|Out of memory|Killed process'
Les trois commandes ci-dessus fournissent un état instantané, cinq échantillons de vmstat, puis les messages du noyau correspondants. Les taux du premier rapport de vmstat sont des moyennes depuis le démarrage, comme le précise le manuel de vmstat ; les suivants couvrent une seconde. Un suivi sans nombre maximal, tel que vmstat 1 ou free -s 2, se termine avec Ctrl+c.
Le filtre -g utilise des expressions régulières compatibles Perl : | sépare ici les variantes et --case-sensitive=no ignore la casse. Consultez le manuel de journalctl pour les options disponibles dans votre version.
La recherche avec journalctl peut ne donner aucun résultat selon la distribution et les paramètres de journal, et l'autorisation de lire le journal peut être requise.
Trouver les processus qui utilisent beaucoup de mémoire
Dans ps, vous pouvez trier par utilisation de la mémoire pour vérifier les principaux processus.
ps -eo pid,user,%mem,rss,comm --sort=-rss | head
RSS indique la quantité de pages actuellement chargées en mémoire physique, mais les pages partagées peuvent être comptées plusieurs fois pour différents processus. Pour analyser les conteneurs, les bibliothèques partagées et les mappings de fichiers avec précision, considérez les métriques du groupe de contrôle (cgroup) et des outils comme smem.
Ne videz pas le cache de manière inconditionnelle
Le cache de page est géré par le noyau pour améliorer les performances du système. Forcer le vidage du cache pour rendre les chiffres dans free plus petits peut augmenter les lectures sur le disque et en réalité réduire les performances. Ne faites cela que lorsqu'il y a un objectif clair, comme un test de performance reproductible, et lorsque vous comprenez l'impact et les méthodes de récupération.
Points à considérer pour les unités et l'automatisation
Unités binaires et unités décimales
L’affichage avec -h utilise la série KiB, MiB, GiB basée sur 1024. Utiliser --si utilise la série kB, MB, GB basée sur 1000.
free -h --si
Mélanger différentes unités dans la documentation ou la surveillance peut créer des divergences, donc spécifiez la norme.
Ne pas analyser la chaîne d'affichage telle quelle
Les colonnes et les méthodes de calcul de free peuvent varier selon la version de procps-ng, et les unités lisibles par l'homme ne sont pas adaptées à l'analyse. En automatisation, si possible, utilisez les entrées requises de /proc/meminfo ou les métriques structurées fournies par les agents de surveillance, et fixez les unités et la version.
Pourquoi les valeurs libres apparaissent grandes dans les conteneurs
free lit /proc/meminfo. Selon le runtime du conteneur et la configuration du cgroup, ce fichier peut afficher des valeurs proches de la mémoire totale de l'hôte, ce qui peut différer des limites de mémoire réelles appliquées au conteneur.
Lors de la détermination de la capacité disponible d'un conteneur, assurez-vous de vérifier les requêtes et limites de l'orchestrateur, les limites de mémoire du cgroup ainsi que l'utilisation actuelle, et les événements OOM ensemble. Il est important de ne pas conclure que la mémoire disponible pour un conteneur se base uniquement sur la valeur free de l'hôte.
Questions fréquemment posées
Est-ce que presque 0 de mémoire libre signifie que la mémoire est insuffisante ?
Pas nécessairement. Lorsque Linux utilise la mémoire restante comme cache, free peut être faible. Vérifiez available, les entrées/sorties de swap et les performances du service ensemble.
Toute la mémoire buff/cache est-elle récupérable ?
Une partie peut être récupérée si nécessaire, mais pas toute immédiatement. available est une estimation qui tient compte de cette différence, il est donc préférable de ne pas simplement ajouter la totalité de buff/cache comme mémoire libre.
L'utilisation du swap signifie-t-elle toujours que la RAM est insuffisante ?
Non. Des pages inactives du passé peuvent rester dans le swap. Il faut vérifier la tendance à l'augmentation de l'utilisation du swap, ainsi que l'entrée/sortie réelle du swap et les délais.
Pourquoi la valeur utilisée apparaît-elle différente des autres outils ?
La façon dont le cache et la mémoire récupérable sont classés peut varier selon l'outil et la version. Comparez le /proc/meminfo au même instant, la version de procps-ng, et les définitions de chaque outil.
Résumé
free -h est une commande de base pour vérifier rapidement l'état de la RAM et du swap. Pour déterminer une pénurie de mémoire, il ne faut pas se limiter à la colonne free mais considérer ensemble available, l'entrée/sortie du swap, l'utilisation des processus et les délais de service.
Si la charge est élevée en même temps, référez-vous à l’interprétation de la charge moyenne avec uptime pour vérifier également les limites du processeur (CPU, Central Processing Unit) et des E/S.




