Wie können virtuelle Maschinen so wenig RAM auf dem physischen Hostcomputer verbrauchen?

24

Ich verwende VirtualBox auf einem Windows XP-Computer mit 2 GB RAM. Ich habe eine virtuelle Ubuntu-Maschine erstellt und ihr einen Hauptspeicher von 750 MB zugewiesen.

Um es auf die Probe zu stellen, habe ich auf der virtuellen Maschine 20 Dinge gleichzeitig ausgeführt. Laut "top" in Ubuntu wurden 750 Megabyte Arbeitsspeicher sowie ein beträchtlicher Swap-Platz verbraucht.

Zurück im Windows Task-Manager verwendete VitrualBox jedoch nur 45.000 KB Arbeitsspeicher. Als ich die virtuelle Maschine aufforderte, mehr und mehr zu tun, stieg die CPU-Auslastung des VirtualBox-Prozesses (unter Windows), die Speichernutzung blieb jedoch gleich.

Wie kann eine virtuelle Maschine, die 750 MB Arbeitsspeicher verwendet, nur 45 MB Arbeitsspeicher auf einer physischen Maschine belegen?

Ich nehme an, die Antwort ist, dass die virtuelle Maschine keinen realen Speicher verwendet, sondern simulierten Speicher (dh Swap Space), aber es fühlt sich sicher bissig an, als würde sie im RAM laufen.

UPDATE: Ich habe wie vorgeschlagen mit Perfmon rumgespielt. Selbst wenn ich alles zusammenfasse, was mir einfällt, scheint es immer noch weniger als 300 Megabyte zu beanspruchen ... es ist also immer noch ein Rätsel.

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936
dggoldst
quelle

Antworten:

7

Die Spalten im Task-Manager können irreführende Zahlen enthalten. Für eine genaue Speichernutzung pro Prozess können Sie perfmon (Leistungsüberwachung in der Systemsteuerung) verwenden und sich die Zahlen für "private Bytes" ansehen.

Um dies zu zeigen, gehe in perfmon und klicke, um den Zähler hinzuzufügen (ich bin eine Ctrl+ IArt von Person). Das "Leistungsobjekt" wäre "Prozess", wobei sich "Private Bytes" in der Zählerliste befinden - Sie müssten natürlich den relevanten Prozess aus der Liste auf der rechten Seite auswählen.

Rowland Shaw
quelle
Hallo. Ich habe es versucht, hatte aber kein Glück, etwas zu finden, das sich Private Bytes nennt. Können Sie eine Schritt-für-Schritt-Anleitung geben?
dggoldst
Haben hinzugefügt ...
Rowland Shaw
Danke, das ist sehr hilfreich. Ich habe die Analyse der Frage hinzugefügt. Ich kann immer noch nicht herausfinden, warum es nicht 750 ergibt.
dggoldst
Sehr komisch. Ich könnte darauf hinweisen, dass PrivateBytes eine Teilmenge von VirtualBytes ist (Virtual Bytes ist der Anteil des zugewiesenen Adressraums, während Private Bytes der Speicher ist, der noch nicht freigegeben wurde - Sie können eine Fragmentierung des Speichers mit einem kleinen Speicherverlust erhalten und haben Anwendungen sterben mit nicht genügend Speicher, auch wenn genügend verfügbar ist). Möglicherweise weist der Virtualisierungstreiber den Speicher so zu, dass er nicht angezeigt wird. Dies ist sinnvoll, da der Speicher nicht auf die Festplatte ausgelagert werden darf.
Rowland Shaw
Von den vier Leistungsindikatoren, die Sie in Ihre Tabelle aufnehmen, zählt nur "PoolNonPagedBytes" den nicht auslagerbaren virtuellen Speicher, daher wird dieser physische Speicher verwendet. Die anderen sind alle virtuell. Wie bei jedem anderen virtuellen Arbeitsspeicher ist der tatsächlich verwendete Arbeitsspeicher fast immer viel geringer. Dies ist einer der Hauptpunkte des virtuellen Arbeitsspeichers.
Jamie Hanrahan
5

Bei einigen Virtualisierungslösungen unter Linux wird der Host-Kernel aufgrund der Art und Weise, in der der Arbeitsspeicher zugewiesen wird, als spezielle Speicherzuordnungsdatei angezeigt (ähnlich wie bei der /proc/kcorespeziellen Datei), sodass er in der Anzahl der zwischengespeicherten Elemente in der Ausgabe von freeund nicht von gezählt wird "used" zählen.

Ich gehe davon aus, dass in Ihrer Windows-Umgebung etwas Ähnliches passiert: Die 45 MB werden von den Verwaltungsprozessen von VirtualBox verwendet, und die der VM selbst zugewiesenen 750 werden an anderer Stelle gezählt.

David Spillett
quelle
0

Es kann sich um virtuellen Speicher, Speicherzuordnungsdateien oder ähnliches handeln.

Haben Sie versucht, andere Spalten im Task-Manager anzuzeigen?

zildjohn01
quelle
0

Glauben Sie nicht, Task-Manager. Es kann nicht alles sehen.

Dieses Problem tritt häufiger bei SQL Server auf. Mit SQL habe ich noch nie jemanden gefunden, der mir einen Weg aufgezeigt hat, genaue Informationen vom Task-Manager abzurufen andere Spalten.

sgmoore
quelle