Utilisation élevée de la mémoire mais aucun processus ne l'utilise

17

Je fonctionne free -msur une machine virtuelle Debian fonctionnant sur Hyper-V:

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

Donc, sur mes 10 Go de mémoire, 8,5 Go sont en cours d'utilisation et seulement 1500 Mo sont gratuits (hors cache).

Mais j'ai du mal à trouver ce qui utilise la mémoire. La sortie de ps aux | awk '{sum+=$6} END {print sum / 1024}', qui est censée additionner l'utilisation RSS est:

1005.2

En d'autres termes, mes processus n'utilisent que 1 Go de mémoire mais le système dans son ensemble (hors cache) utilise 8,5 Go.

Que pourrait utiliser l'autre 7,5 Go?

ps: J'ai un autre serveur avec une configuration similaire qui montre un mem utilisé de 1200 (mem gratuit = 8,8 Go) et la somme de l'utilisation RSS dans ps est de 900, ce qui est plus proche de ce que j'attendrais ...


ÉDITER

cat /proc/meminfo sur la machine 1 (mémoire faible):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo sur la machine 2 (utilisation normale de la mémoire):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB
assylias
la source

Réponses:

15

Je comprends que vous utilisez Hyper-V, mais les concepts sont similaires. Peut-être que cela vous mettra sur la bonne voie.

Votre problème est probablement dû au gonflement de la mémoire virtuelle, une technique que l'hyperviseur utilise pour optimiser la mémoire. Voir ce lien pour une description

J'ai observé exactement les mêmes symptômes avec mes machines virtuelles dans vSphere. Une machine 4G avec rien qui tourne dessus rapporterait 30M utilisés par le cache, mais plus de 3G "utilisés" dans la ligne "- / + buffers".

Voici un exemple de sortie de la commande statistiques de VMWare. Cela montre à quel point la 3G est proche de mon montant "utilisé":

vmware-toolbox-cmd stat balloon
3264 MB

Dans mon cas, un peu évidemment, mon pilote de ballon utilisait ~ 3G

Je ne sais pas quelle est la commande similaire dans Hyper-V pour obtenir vos statistiques de ballon, mais je suis sûr que vous obtiendrez des résultats similaires

Mat
la source
Merci - vous êtes définitivement sur quelque chose. lsmod | grep hv_ montre hv_balloon sur la machine à faible mémoire mais pas sur l'autre - donc le module de ballon est chargé sur l'un et pas sur l'autre. Et le comportement ressemble beaucoup à cette description .
assylias
Je ne sais pas à quoi correspond l'équivalent d' vmware-toolbox-cmdHyper V.
assylias
@assylias Je sais, désolé. Je me suis regardé en écrivant cette réponse et suis venu vide. Cependant, si vous écrivez un programme qui alloue rapidement beaucoup de mémoire, cela peut convaincre l'hyperviseur que votre machine virtuelle a besoin des ressources. Similaire au cas de test d'éviction du cache disque, mais cause racine différente.
Matt
Vous pouvez désactiver la fonction de ram dynamique dans Hyper-V pour résoudre ce problème.
Ashish Negi
Je ne vois pas vraiment la solution ici, je le crains.
Jamie Hutber
1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

Réponse courte: le noyau utilise la mémoire tampon / cache pour diverses tâches, telles que la mise en cache des fichiers. Cette mémoire est disponible pour les applications si elle est nécessaire, vous avez donc raison de dire que vous avez utilisé 944 Mo.

vik
la source
Selon ce lien, 944 Mo correspond à la quantité de cache
assylias
2
Non, 944 Mo est la quantité de RAM réellement utilisée par les applications et non disponible pour les autres applications. Relisez cet article: "Linux (comme la plupart des systèmes d'exploitation modernes) essaiera toujours d'utiliser de la RAM libre pour la mise en cache des trucs, donc Mem: free sera presque toujours très faible. Par conséquent, la ligne - / + buffers / cache: est affichée, car elle affiche la quantité de mémoire disponible en ignorant les caches; les caches seront libérés automatiquement si la mémoire se fait rare, donc ils n'ont pas vraiment d'importance. "
vik
oui et les tampons - / + / cache affichent 1,5 Go de mémoire gratuite ...
assylias
Veuillez comprendre que le 1485 libre dans le cache des tampons - / + n'est PAS la quantité de mémoire disponible pour les applications sur le système. La quantité de mémoire réellement disponible pour vos applications est: (10017 - (9475 - 8531)) = 9073. Est-ce logique?
vik
Je pense que vous vous trompez: la deuxième ligne exclut le cache et les tampons et est l'utilisation réelle de la mémoire des applications (et c'est ce que dit votre lien ...).
assylias