Wysokie wykorzystanie pamięci, ale żaden proces jej nie używa

17

Pracuję free -mna maszynie wirtualnej Debian działającej na Hyper-V:

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

Z mojej 10 GB pamięci korzysta 8,5 GB, a tylko 1500 MB jest bezpłatne (bez pamięci podręcznej).

Ale staram się znaleźć to, co korzysta z pamięci. Dane wyjściowe ps aux | awk '{sum+=$6} END {print sum / 1024}', które mają sumować wykorzystanie RSS:

1005.2

Innymi słowy, moje procesy używają tylko 1 GB pamięci, ale system jako całość (bez pamięci podręcznej) używa 8,5 GB.

Co może korzystać z innych 7,5 GB?

ps: Mam inny serwer o podobnej konfiguracji, który pokazuje zużytą pamięć 1200 (wolna pamięć = 8,8 GB), a suma użycia RSS w ps wynosi 900, co jest bliższe oczekiwaniom ...


EDYTOWAĆ

cat /proc/meminfo na maszynie 1 (mało pamięci):

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 na komputerze 2 (normalne użycie pamięci):

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
źródło

Odpowiedzi:

15

Rozumiem, że używasz Hyper-V, ale pojęcia są podobne. Może to ustawi właściwy kierunek.

Przyczyną problemu jest prawdopodobnie balonowanie pamięci wirtualnej, technika wykorzystywana przez hiperwizora do optymalizacji pamięci. Zobacz ten link, aby uzyskać opis

Zauważyłem dokładnie te same objawy na moich maszynach wirtualnych w vSphere. Maszyna 4G, na której nie ma nic uruchomionego, zgłosi 30 MB używanej przez pamięć podręczną, ale przez 3G „używana” w linii „- / + buffers”.

Oto przykładowe dane wyjściowe z polecenia statystyki VMWare. To pokazuje, jak blisko 3G jest naliczana moja „wykorzystana” kwota:

vmware-toolbox-cmd stat balloon
3264 MB

W moim przypadku, oczywiście, mój sterownik balonu używał ~ 3G

Nie jestem pewien, jakie jest podobne polecenie w Hyper-V, aby uzyskać statystyki balonu, ale jestem pewien, że otrzymasz podobne wyniki

Matt
źródło
Dzięki - zdecydowanie jesteś na czymś. lsmod | grep hv_ pokazuje hv_balloon na maszynie z małą pamięcią, ale nie na drugiej - więc moduł balonu jest ładowany na jednym, a nie na drugim. A zachowanie wygląda bardzo podobnie do tego opisu .
assylias
Nie jestem jednak pewien, jaki jest odpowiednik vmware-toolbox-cmdHyper V.
assylias
@assylias Wiem, przepraszam. Podczas pisania tej odpowiedzi spojrzałem na siebie i wyszedłem pusty. Jeśli jednak napiszesz program, który szybko przydziela dużo pamięci, może to przekonać hiperwizora, że ​​maszyna wirtualna potrzebuje zasobów. Podobnie jak przypadek testowy eksmisji pamięci podręcznej dysku, ale inna podstawowa przyczyna.
Matt
Możesz wyłączyć funkcję dynamicznego pamięci RAM w Hyper-V, aby rozwiązać ten problem.
Ashish Negi
Obawiam się, że tak naprawdę nie widzę rozwiązania.
Jamie Hutber
1

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

Krótka odpowiedź: jądro używa buforów / pamięci podręcznej do różnych zadań, takich jak buforowanie plików. Ta pamięć jest dostępna dla aplikacji, jeśli jest potrzebna, więc masz rację mówiąc, że masz 944 MB używanych.

Vik
źródło
Według tego linku 944 MB to ilość pamięci podręcznej
assylias
2
Nie, 944 MB to ilość pamięci RAM faktycznie używanej przez aplikacje i niedostępnej dla innych aplikacji. Przeczytaj ponownie ten post: „Linux (podobnie jak większość współczesnych systemów operacyjnych) zawsze będzie próbował użyć wolnej pamięci RAM do buforowania rzeczy, więc Mem: free prawie zawsze będzie bardzo niski. Dlatego linia - / + bufory / cache: jest pokazana, ponieważ pokazuje ile pamięci jest wolne podczas ignorowania pamięci podręcznych; pamięci podręczne zostaną zwolnione automatycznie, jeśli pamięć się wyczerpie, więc tak naprawdę nie mają znaczenia ”.
Vik
tak, a - / + bufory / pamięć podręczna pokazuje 1,5 GB wolnej pamięci ...
assylias
Proszę zrozumieć, że 1485 wolnej pamięci podręcznej buforów - / + NIE jest ilością pamięci dostępnej dla aplikacji w systemie. Ilość pamięci faktycznie dostępnej dla twoich aplikacji wynosi: (10017 - (9475 - 8531)) = 9073. Czy to ma sens?
Vik
Myślę, że się mylisz: druga linia wyklucza pamięć podręczną i bufory i jest faktycznym wykorzystaniem pamięci przez aplikacje (i tak mówi twój link ...).
assylias