Quelle est la différence entre le rapport d'utilisation de la mémoire dans le Moniteur système et celui de free?

14

J'utilise System Monitor 2.28.0. Lorsque je regarde dans l'onglet Ressources, je vois un joli graphique avec pour la mémoire et l'échange. La mémoire est d'environ 60% 2,3 Gio de 3,8. Lorsque je tape la commande gratuitement, j'ai obtenu:

             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

cat / proc / meminfo | grep MemFree donne

MemFree:           34536 kB

La situation est restée la sauvegarde pendant plusieurs minutes. J'ai commencé beaucoup de processus avec un script et le script attend que la mémoire libre diminue. Selon ce que je vois dans l'onglet Processus (ou en haut), le nombre dans le Moniteur système semble beaucoup fermé au total de la mémoire du processus que celui rapporté par free.

Merci

Guillaume Coté
la source

Réponses:

15

La différence est de savoir si la mémoire "tampons" et "mise en cache" est incluse ou non dans le décompte "utilisé".

Généralement, la mémoire système Linux est utilisée par le noyau à deux fins: les processus et le cache / tampons de fichiers / réseau. Si vous regardez attentivement la sortie de free, elle est déjà affichée:


             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

Si vous ajoutez des "tampons" et "cache", puis soustrayez cela de la colonne "utilisé", vous obtiendrez la deuxième ligne sous "utilisé" (la ligne qui commence par -/+ buffers/cache), qui indique environ 2,3 G (2384512) dans use, qui correspond à la mémoire signalée utilisée par le Moniteur système (il ignore les tampons / mis en cache car ceux-ci disparaîtront pour faire de la place pour plus de processus).

Votre grep contre /proc/meminfocorrespond en fait à la colonne "libre" de la première ligne (32512 est assez proche de 34536 - il a probablement changé entre les deux sorties de commande).

Kees Cook
la source
Merci, je me demande pourquoi le système avait besoin de 1,5 Gig en cache, mais cela est clair.
Guillaume Coté
1
C'est moins une question de «besoin» que d '«utilisé». À ce moment-là, il avait lu au moins autant sur le disque dur et l'avait gardé en mémoire de secours au cas où il aurait besoin de le réutiliser.
Kees Cook
0

Lorsque j'ai mis la main sur le moniteur système, l'utilisation de la mémoire indiquée dans l'onglet "Ressources" était la même que dans la freecolonne /usr/bin/free.

Le problème est que la mémoire physique libre est proche de 0, tôt ou tard: Linux se met en cache de manière agressive afin que l'argent que vous avez dépensé pour acheter de la RAM soit utilisé efficacement. Et cela signifiait que le graphique afficherait en permanence> 98% d'utilisation de la mémoire, ce qui était inutile.

J'ai donc décidé de faire comme la -/+ buffers/cache:ligne de /usr/bin/free. De cette façon, le graphique est significatif et permet à l'utilisateur de regarder l'utilisation de la mémoire ~ application / userland au lieu de l'état physique de la mémoire.

Je sais, c'est un peu trompeur, car la plupart des (l) utilisateurs ne comprennent pas que la mémoire physique gratuite est un gaspillage d'argent et de performances. J'ai été confronté au même problème au travail: tous les lundis, les serveurs redémarraient et, dans les 24 heures suivantes, chaque serveur déclenchait une alerte "mémoire pleine". J'ai donc fait corriger le calcul de la mémoire libre dans le logiciel de supervision, tout comme dans le moniteur système.

Solaris actuel a le même problème: le cache ZFS (ARC) n'est pas inclus dans la mémoire libre signalée par des outils comme vmstatce qui fait que les administrateurs de base de données stupides se plaignent que "ZFS est mauvais" :)

Benoît
la source