Hohe Speichernutzung, aber kein Prozess verwendet es

17

Ich laufe free -mauf einer Debian-VM unter Hyper-V:

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

Von meinen 10 GB Arbeitsspeicher werden 8,5 GB verwendet, und nur 1500 MB sind frei (ohne Cache).

Aber ich kämpfe darum, herauszufinden, was die Erinnerung nutzt. Die Ausgabe von ps aux | awk '{sum+=$6} END {print sum / 1024}', die die RSS-Auslastung addieren soll, ist:

1005.2

Mit anderen Worten, meine Prozesse belegen nur 1 GB Arbeitsspeicher, während das gesamte System (ohne Cache) 8,5 GB belegt.

Was könnte die anderen 7,5 GB verwenden?

ps: Ich habe einen anderen Server mit einer ähnlichen Konfiguration, die verwendetes mem von 1200 anzeigt (freies mem = 8,8 GB) und die Summe der RSS-Nutzung in ps ist 900, was näher an dem liegt, was ich erwarten würde ...


BEARBEITEN

cat /proc/meminfo auf Maschine 1 (wenig Speicher):

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 auf Maschine 2 (normale Speichernutzung):

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
quelle

Antworten:

15

Ich verstehe, dass Sie Hyper-V verwenden, aber die Konzepte sind ähnlich. Vielleicht sind Sie damit auf dem richtigen Weg.

Ihr Problem ist wahrscheinlich auf die virtuelle Speicherbeschleunigung zurückzuführen, eine Technik, mit der der Hypervisor den Speicher optimiert. Siehe diesen Link für eine Beschreibung

Ich habe bei meinen VMs in vSphere genau dieselben Symptome festgestellt. Ein 4G-Computer, auf dem nichts ausgeführt wird, würde 30 MB Cache-Speicher melden, aber über 3G, das in der Zeile "- / + Buffer" "verwendet" wird.

Hier sehen Sie eine Beispielausgabe des Statistikbefehls von VMWare. Dies zeigt, wie nahe 3G an meinem "verbrauchten" Betrag ist:

vmware-toolbox-cmd stat balloon
3264 MB

In meinem Fall verwendete mein Ballonfahrer offensichtlich ~ 3G

Ich bin nicht sicher, was der ähnliche Befehl in Hyper-V ist, um Ihre Ballonstatistiken zu erhalten, aber ich bin sicher, dass Sie ähnliche Ergebnisse erhalten werden

Matt
quelle
Danke - Sie sind definitiv auf etwas. lsmod | grep hv_ zeigt hv_balloon auf der Maschine mit niedrigem Arbeitsspeicher, aber nicht auf der anderen - das Ballonmodul ist also auf der einen und nicht auf der anderen geladen. Und das Verhalten sieht dieser Beschreibung sehr ähnlich .
Assylias
Nicht sicher, was das Äquivalent vmware-toolbox-cmdauf Hyper V ist.
Assylias
@assylias Ich weiß, sorry. Ich habe mich beim Schreiben dieser Antwort umgesehen und bin leer ausgegangen. Wenn Sie jedoch ein Programm schreiben, das schnell viel Arbeitsspeicher zuweist, kann dies den Hypervisor davon überzeugen, dass Ihre VM die Ressourcen benötigt. Ähnlich wie bei einem Testfall zum Entfernen des Festplattencaches, jedoch mit einer anderen Ursache.
Matt
Sie können die dynamische RAM-Funktion in Hyper-V deaktivieren, um dieses Problem zu beheben.
Ashish Negi
Ich fürchte, ich sehe die Lösung hier nicht wirklich.
Jamie Hutber
1

/server/85470/sichere-zwischenspeicher-zeile-in-der-kostenlosen-Ausgabe

Kurze Antwort: Der Kernel verwendet den Puffer / Cache-Speicher für verschiedene Aufgaben, z. B. zum Zwischenspeichern von Dateien. Dieser Speicher steht Anwendungen bei Bedarf zur Verfügung. Sie haben also zu Recht 944 MB belegt.

vik
quelle
Nach dieser Verbindung, 944MB ist die Menge an Cache
assylias
2
Nein, 944 MB RAM werden von Anwendungen tatsächlich verwendet und stehen anderen Anwendungen nicht zur Verfügung. Lesen Sie diesen Beitrag noch einmal: "Linux (wie die meisten modernen Betriebssysteme) wird immer versuchen, freien RAM für das Zwischenspeichern von Daten zu verwenden, daher wird Mem: free fast immer sehr niedrig sein. Daher wird die Zeile - / + Puffer / Cache: angezeigt, weil es anzeigt Wie viel Speicher beim Ignorieren von Caches frei ist, wird automatisch freigegeben, wenn der Speicher knapp wird. "
Vik
yes and the - / +
puffers
Bitte haben Sie Verständnis dafür, dass der freie 1485 im Puffer-Cache - / + NICHT der für Anwendungen auf dem System verfügbare Speicherplatz ist. Die für Ihre Anwendungen tatsächlich verfügbare Speicherkapazität beträgt: (10017 - (9475 - 8531)) = 9073. Ist dies sinnvoll?
vik
Ich denke, Sie sind falsch: Die zweite Zeile schließt den Cache und die Puffer aus und ist die tatsächliche Speicherauslastung der Anwendungen (und das sagt Ihr Link ...).
Assylias