GNU/Linux >> Tutoriels Linux >  >> Linux

Déterminer correctement l'utilisation de la mémoire sous Linux

Copier/coller sans vergogne ma réponse de serverfault l'autre jour :-)

Le système de mémoire virtuelle Linux n'est pas si simple. Vous ne pouvez pas simplement additionner tous les champs RSS et obtenir la valeur rapportée used par free . Il y a plusieurs raisons à cela, mais je vais en citer quelques-unes parmi les plus importantes.

  • Lorsqu'un processus bifurque, le parent et l'enfant s'afficheront avec le même RSS. Cependant, Linux utilise la copie sur écriture afin que les deux processus utilisent réellement la même mémoire. Ce n'est que lorsque l'un des processus modifie la mémoire qu'elle sera réellement dupliquée.
    Cela entraînera le free nombre inférieur au top Somme RSS.

  • La valeur RSS n'inclut pas la mémoire partagée. Étant donné que la mémoire partagée n'appartient à aucun processus en particulier, top ne l'inclut pas dans RSS.
    Cela provoquera le free nombre supérieur au top Somme RSS.


Si vous recherchez des numéros de mémoire qui s'additionnent, jetez un œil à smem :

smem est un outil qui peut fournir de nombreux rapports sur l'utilisation de la mémoire sur les systèmes Linux. Contrairement aux outils existants, smem peut signaler la taille d'ensemble proportionnelle (PSS), qui est une représentation plus significative de la quantité de mémoire utilisée par les bibliothèques et les applications dans un système de mémoire virtuelle.

Étant donné que de grandes parties de la mémoire physique sont généralement partagées entre plusieurs applications, la mesure standard de l'utilisation de la mémoire connue sous le nom de taille d'ensemble résidente (RSS) surestimera considérablement l'utilisation de la mémoire. PSS mesure plutôt la "part équitable" de chaque application de chaque zone partagée pour donner une mesure réaliste.

Par exemple ici :

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

Donc PSS est la colonne intéressante ici car elle tient compte de la mémoire partagée.
Contrairement à RSS il est significatif de l'additionner. Nous obtenons ici un total de 654 Mo pour les processus utilisateur.

La sortie à l'échelle du système indique le reste :

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

Donc 1 Go de RAM totale =654 Mo de processus utilisateur + 346 Mo de mémoire noyau + 16 Mo gratuit
(plus ou moins quelques Mo)

Dans l'ensemble, environ la moitié de la mémoire est utilisée pour le cache (494 Mo).

Question bonus :qu'est-ce que le cache utilisateur vs le cache noyau ici ?

btw pour quelque chose de visuel, essayez :

# smem  --pie=name


Un très bon outil est pmap qui répertorie l'utilisation actuelle de la mémoire pour un certain processus :

pmap -d PID

Pour plus d'informations à ce sujet, consultez la page de manuel man pmap et jetez également un coup d'œil à 20 outils de surveillance du système Linux que chaque administrateur système devrait connaître, qui répertorie les excellents outils que j'utilise toujours pour obtenir des informations sur ma machine Linux.


Linux
  1. Linux - Limiter l'utilisation de la mémoire pour un seul processus Linux ?

  2. Linux - Utilisation réelle de la mémoire ?

  3. Comment vérifier l'utilisation de la mémoire sur un serveur basé sur Linux

  4. Détermination de l'utilisation du disque sous Linux à l'aide de la commande "du"

  5. Récupérer l'utilisation du processeur et l'utilisation de la mémoire d'un seul processus sous Linux ?

Comment vérifier l'utilisation de la mémoire sous Linux

Commande gratuite Linux (vérifier l'utilisation de la mémoire)

Comment trouver l'utilisation de la mémoire utilisateur sous Linux

Comment l'utilisation de la mémoire est-elle signalée sous Linux ?

Représentation graphique de l'utilisation de la mémoire des processus sous Linux

Ubuntu Linux :traiter la mémoire d'échange et l'utilisation de la mémoire