207 votes

Signification de la ligne buffers/cache dans la sortie de free

Pourquoi mon serveur affiche-t-il

            total      used      free   shared buffers    cached
    Mem: 12286456  11715372    571084        0   81912   6545228
-/+ buffers/cache:  5088232   7198224
   Swap: 24571408     54528  24516880

Je n'ai aucune idée sur le calcul de la mémoire dans linux. Je pense qu'il est dit que 5088232 est utilisé alors que 7198224 est libre, ce qui signifie qu'il consomme en fait 5GB de RAM ?

3 votes

0 votes

Pour ceux qui ont besoin d'une explication encore plus simple, étape par étape, consultez thoughtsbyclayg.blogspot.com/2008/09/ son explication m'a beaucoup aidé.

4 votes

257voto

Andrew Grimm Points 928

Signification des valeurs

La première ligne signifie :

  • total : Votre RAM (physique) totale (à l'exception d'un petit morceau que le noyau se réserve en permanence au démarrage) ; c'est pourquoi il affiche environ 11.7 GiB , et non 12 GiB, ce que vous avez probablement.

  • used Mémoire utilisée par le système d'exploitation.

  • free : la mémoire n'est pas utilisée.

  • shared / buffers / cached : Ceci montre l'utilisation de la mémoire à des fins spécifiques, ces valeurs sont incluses dans la valeur de used .

La deuxième ligne donne les valeurs de la première ligne ajustées. Elle donne la valeur originale de used moins la somme buffers+cached et la valeur originale pour free plus la somme buffers+cached d'où son titre. Ces nouvelles valeurs sont souvent plus significatives que celles de la première ligne.

La dernière ligne ( Swap: ) donne des informations sur l'utilisation de l'espace d'échange (c'est-à-dire le contenu de la mémoire qui a été temporairement déplacé sur le disque).

Contexte

Pour bien comprendre la signification de ces chiffres, il faut connaître le sous-système de mémoire virtuelle (VM) de Linux. Une version courte : Linux (comme la plupart des systèmes d'exploitation modernes) essaiera toujours d'utiliser la RAM libre pour la mise en cache de certaines choses. Mem: free sera presque toujours très faible. Par conséquent, la ligne -/+ buffers/cache: est affiché, car il montre combien de mémoire est libre en ignorant les caches ; les caches seront libérés automatiquement si la mémoire devient rare, donc ils n'ont pas vraiment d'importance.

Un système Linux est vraiment dépourvu de mémoire si l'option free valeur dans -/+ buffers/cache: La ligne devient basse.

Pour plus de détails sur la signification des chiffres, voir par exemple les questions :

Changements dans procps 3.3.10

Notez que la sortie de free a été modifié dans procps 3.3.10 (publié en 2014). Les colonnes rapportées sont maintenant "total", "utilisé", "libre", "partagé", "buff/cache", "disponible". et la signification de certaines valeurs a été modifiée, principalement pour mieux prendre en compte le cache de la dalle du noyau Linux.

Ver Rapport de bogue Debian n° 565518 pour la motivation, et Quels sont les changements dans free sortie de 14.04 à 16.04 signifie ? pour de plus amples informations.

0 votes

Pourriez-vous nous dire quelles sortes de choses Linux peut mettre en cache ? Est-ce que ce sont des fichiers qui ont été accédés ou des données réseau ?

0 votes

@CMCDragonkai : La réponse à serverfault.com/questions/23433/ traite en détail de ce qui constitue un "cache" et un "tampon".

8 votes

Je ne pense pas que l'affirmation "total = utilisé + libre" soit correcte, voir la sortie suivante sur ma machine : $ free -h total used free shared buff/cache available Mem: 3.4G 585M 152M 11M 2.6G 2.5G Swap: 4.0G 84M 3.9G

28voto

Flimm Points 361

La méthode actuellement acceptée réponse de 2009 n'est plus d'actualité. Il est important de s'assurer que les informations que vous obtenez sont correctes et correspondent à la version de free (distribué dans le paquet Debian procps ou l'équivalent dans votre distribution). Il est également utile de regarder la sortie de man free et aussi man 5 proc qui contient des informations sur /proc/meminfo le fichier dans lequel free obtient ses données sur Linux.

Par défaut, free La sortie de l'entreprise est dans kibibytes (1 kibibyte = 1024 octets), comme vous pouvez le voir dans la page du manuel. Je préfère utiliser le -h qui montre les suffixes, comme ceci :

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       6.1Gi       1.9Gi       301Mi       7.5Gi       8.8Gi
Swap:         979Mi          0B       979Mi

La première ligne Mem signifie :

  • total (Mem) : mémoire totale installée (c'est-à-dire MemTotal de /proc/meminfo ), cette toute la mémoire en RAM
  • used (Mem) : mémoire utilisée, égale à total - free - buffers - cache
  • free (Mem) : mémoire inutilisée (c'est-à-dire MemFree ), c'est toute la mémoire qui n'est pas utilisée pour quoi que ce soit (même les caches) en RAM
  • shared (Mem) : il s'agit de la quantité de mémoire utilisée principalement pour les opérations suivantes tmpfs ( Shmem )
  • buff/cache (Mem), somme de buffers y cache :
    • buffers la mémoire utilisée par les tampons du noyau ( Buffers ), qui est une mémoire dont le noyau peut tirer parti.
    • cache la mémoire utilisée par le cache de page et les dalles ( Cached y SReclaimable ). Le site cache des pages contient le contenu des fichiers du système de fichiers mis en cache dans la RAM, et c'est généralement une bonne chose qu'il soit un nombre élevé. Je présume que les "slabs" sont une fonction de mise en cache similaire.
  • available (Mem) : il s'agit d'une estimation de la quantité de mémoire disponible pour le démarrage de nouvelles applications, sans swapping. Elle inclut la majeure partie de la mémoire comptabilisée dans le cache (puisque le cache de la page peut être abandonné pour démarrer de nouvelles applications), mais il ne compte pas le swap (puisqu'il est généralement préférable de ne pas utiliser d'espace swap lent).

La deuxième ligne est Swap . Voici mon explication :

  • total (Swap) : il s'agit de la quantité totale d'espace disque réservée au swap ( SwapTotal sur proc/meminfo ). Vous pouvez vérifier que cela correspond à la sortie de swapon -s .
  • used (Swap) : la quantité d'espace disque swap qui est actuellement utilisée. Encore une fois, vous pouvez le vérifier en le comparant avec la sortie de la commande swapon -s
  • free (Swap) : la quantité d'espace disque swap qui n'est actuellement pas utilisé ( SwapFree sur /proc/meminfo ). Il est égal à total (Swap) - used (Swap)

0 votes

Merci pour cette réponse ! Une question de mon côté : si je veux savoir si un serveur va manquer de mémoire, dois-je alors utiliser le nombre d'utilisateurs du serveur ? free Mem ou dois-je également prendre en compte le nombre concernant buffer+cache ?

0 votes

@Flimm Au moins dans Ubuntu 18 et 20 total est juste MemTotal (sans SwapTotal ). Pourquoi total de la première ligne ( Mem ) comprennent SwapTotal même si elle est explicitement listée dans la ligne suivante ( Swap ) ?

0 votes

@DonFoumare Par "Ubuntu 18", voulez-vous dire Ubuntu 18.04 ou Ubuntu 18.10 ? De même, par "Ubuntu 20", voulez-vous dire Ubuntu 20.04 ou Ubuntu 20.10 ? Quoi qu'il en soit, je pense que tu as raison, après avoir regardé les documents suivants map free et man 5 proc . J'ai modifié ma réponse.

3voto

Ryan Sampson Points 2898

La ligne buffers/cache vous indique la quantité de mémoire utilisée par les programmes (première de ces colonnes), et celle qui est libre pour les programmes (deuxième colonne). Il s'agit d'un nombre assez ésotérique, que vous ne regarderez pas vraiment dans la pratique.

0 votes

Et que signifie la première ligne (mem line)

8 votes

Vous avez 12 Go de RAM installés dans le système, dont 11,5 Go sont utilisés et environ 0,5 Go sont actuellement inutilisés. Environ 82MB de la mémoire utilisée sont utilisés pour les tampons (connexions réseau, etc.), tandis qu'environ 6,5GB sont utilisés pour stocker des copies de données sur le disque, de sorte que les données n'auront pas à être relues si elles sont à nouveau nécessaires.

0 votes

Laissez-moi résumer ce que j'ai compris. Le serveur a 12 Go de mémoire vive installée. La première ligne indique que 11,5 Go sont utilisés. 82MB sont libres. La deuxième ligne montre que 4.8GB est utilisé par les programmes. et 6.86GB est utilisé pour copier les données du disque (deuxième ligne, deuxième colonne). Tout cela signifie que le système a atteint ses limites et que nous devons installer plus de mémoire ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X