Wie funktioniert die Speichernutzung von VirtualBox?

38

Ich habe mehrere VMs mit VirtualBox ausgeführt und die Speichernutzung wurde aus verschiedenen Perspektiven gemeldet. Außerdem habe ich Probleme zu ermitteln, wie viel Speicher meine VMs tatsächlich verwenden. Hier ist ein Beispiel:

  • Ich habe eine VM unter Windows 7 (als Gastbetriebssystem) auf meinem Windows XP-Hostcomputer.
  • Der Hostcomputer verfügt über 3 GB RAM
  • Die Gast-VM verfügt über einen Basisspeicher von 1 GB
  • Wenn ich Task Manager auf dem Gastbetriebssystem ausführe, wird eine Speichernutzung von 430 MB angezeigt
  • Wenn ich Task Manager auf dem Host-Betriebssystem ausführe, werden drei Prozesse angezeigt, die anscheinend zu VirtualBox gehören:
    1. VirtualBox.exe (1) mit 60 MB Arbeitsspeicher (dieser scheint die meiste CPU-Auslastung zu haben)
    2. VirtualBox.exe (2) mit 20 MB Arbeitsspeicher
    3. VBoxSvc.exe mit 11,5 MB Arbeitsspeicher
  • Während die VM ausgeführt wird, beträgt die Speichernutzung des Host-Betriebssystems ca. 2 GB
  • Wenn ich die VM heruntergefahren habe, wird das Host-Betriebssystem auf etwa 900 MB reduziert

Es gibt hier also einige große Unterschiede. Ich verstehe wirklich nicht, wie das GuestOS 400+ MB verwenden kann, während das Host-Betriebssystem nur ungefähr 75 MB anzeigt, die der VM zugewiesen sind. Gibt es andere von VirtualBox verwendete Prozesse, die nicht so offensichtlich benannt sind?

Außerdem würde ich gerne wissen, ob ich einen Computer mit 1 GB betreibe. Wird dies meinem Host-Betriebssystem 1 GB entziehen oder nur die Menge an Speicher, die der Gastcomputer derzeit verwendet?

Aktualisieren:

Jemand drückte Misstrauen gegenüber meinen Speichernutzungszahlen aus, und ich bin mir nicht sicher, ob dieses Misstrauen auf mich oder den Task-Manager-Bericht meines Host-Betriebssystems (der möglicherweise der Schuldige ist) gerichtet war. Für Skeptiker finden Sie hier einen Screenshot dieser Prozesse auf dem Hostcomputer:

VirtualBox-Task-Manager

DrFredEdison
quelle
Ich habe mich heute genau das Gleiche gefragt, als ich zwei VBox-VMs gleichzeitig ausgeführt habe.
MartW
Aktivieren Sie im Task-Manager einige der anderen Speicherspalten (Ansicht-> Spalten auswählen ...). In Windows wird der Arbeitsspeicher auf viele verschiedene Arten gezählt. Beispielsweise kann "Festschreibungsgröße" erheblich höher sein als "Speichernutzung". Was man genau benutzt und wie man sie interpretiert, ist eine andere Geschichte.
Lilbyrdie
Mögliches Duplikat: superuser.com/q/17266/302
Rowland Shaw

Antworten:

12

Der einzige Bereich im Task-Manager, der den vollständigen Betrag wiederzugeben scheint, befindet sich auf der Registerkarte Leistung. Der Wert für die Gesamteinschreibungsgebühr entspricht in etwa dem der VM zugewiesenen Betrag. Ich habe gerade eine mit 1536 MB zugeteilt, und die Festschreibegebühr ging von etwa 2,4 GB auf 0,8 GB zurück. Sie können dies bis zu einem gewissen Grad mit Virtual Box überwachen, indem Sie den Systemmonitor verwenden und die Indikatoren Prozess: Private Bytes für VirtualBox, VBoxSvc und auch VirtualBox # 1, # 2 usw. auswählen (eine für jede ausgeführte VM). Es gibt auch den Speicher: Committed Bytes-Zähler für alles.

MartW
quelle
Das OP scheint jedoch nicht sonderlich daran interessiert zu sein, was zugeteilt wurde, sondern es fragt, was verwendet wird. Ich bin mir also nicht sicher, wie das mit seiner Frage zusammenhängt.
David Schwartz
12

Informationen zur Prozessarchitektur von VirtualBox finden Sie unter
Die VirtualBox-Architektur :

Sobald Sie eine virtuelle Maschine (VM) über die GUI starten, werden zwei Fenster (das Hauptfenster und die VM) ausgeführt, jedoch drei Prozesse. Wenn Sie Ihr System über den Task-Manager (unter Windows) oder einen Systemmonitor (unter Linux) betrachten, sehen Sie Folgendes:

  1. VirtualBox, die GUI für das Hauptfenster;
  2. Ein weiterer VirtualBox-Prozess, der mit dem Parameter -startvm gestartet wurde. Dies bedeutet, dass sein GUI-Prozess als Shell für eine VM fungiert.
  3. VBoxSVC, der oben erwähnte Dienst, der im Hintergrund ausgeführt wird, um alle beteiligten Prozesse im Auge zu behalten. Dies wurde automatisch vom ersten GUI-Prozess gestartet.

In Bezug auf den Speicher heißt es im Benutzerhandbuch :

Basisspeicher

Hiermit wird die Größe des Arbeitsspeichers festgelegt, der der VM während der Ausführung zugewiesen und zugewiesen wird. Die angegebene Speichermenge wird vom Host-Betriebssystem angefordert. Sie muss daher beim Versuch, die VM zu starten, verfügbar sein oder als freier Speicher auf dem Host verfügbar gemacht werden und steht dem Host nicht zur Verfügung, während die VM ausgeführt wird. Dies ist die gleiche Einstellung, die im Assistenten "Neue virtuelle Maschine" festgelegt wurde, wie oben in den Richtlinien unter "Erstellen einer virtuellen Maschine" beschrieben.

Dies bedeutet, dass der Gast aus dem Host herausnimmt:

  • So viel Speicher, wie es mit deklariert wurde
  • Jede VM ist auch eine VirtualBox-ausführbare Datei, daher müssen Sie ihren Speicher hinzufügen.

Es ist immer möglich, dass das VirtualBox-Handbuch mehrere Versionen hinter sich hat und dass die neuesten Techniken zur Speicheroptimierung nicht dokumentiert sind.

Darüber hinaus optimiert VirtualBox möglicherweise die Speichernutzung, indem nicht der gesamte definierte VM-Speicher zugewiesen wird.

Das Zuweisen von Speicher nach Bedarf ist eine Optimierung, die viel physischen Speicher einsparen kann, speicherintensive Prozesse in der VM können jedoch durch den häufigen Bedarf von VirtualBox, mehr Hostspeicher anzufordern, verlangsamt werden.

Harrymc
quelle
8
Es ist nicht VirtualBox-spezifisch - siehe: serverfault.com/questions/19935/…
MartW
@harrymc, Sie sagen also, dass der Task-Manager NICHT in der Prozessliste anzeigt, wie viel virtueller Speicher verwendet wird?
Trevor Boyd Smith
@ TrevorBoydSmith: Ich sage nur, dass es sich um mehr als einen Prozess handelt und dass die Spalten im Task-Manager korrekt ausgewählt werden.
Harrymc
2
mein vm nimmt 1,2 gb auf. Im Task-Manager werden nur 60 MB angezeigt. Daher würde ich behaupten, dass der Task-Manager nicht den gesamten Speicher anzeigt, den mein VM verwendet. es sei denn, Sie können mir irgendwie zeigen, wie Sie den Task-Manager optimieren, um 1,2 GB anzuzeigen.
Trevor Boyd Smith
1
Diese gesamte Konversation und alle Antworten sind nur Variationen einer Verwechslung zwischen virtuellem und physischem Speicher.
David Schwartz
2

Die in TaskManager angezeigten Einträge gelten nicht für Ihre virtuelle Maschine, sondern für die VirtualBox-GUI. Auf der Registerkarte "Leistung" sehen Sie deutlich, wie viel Ihres gesamten Arbeitsspeichers verwendet wird, ohne jedoch die Prozesse zu differenzieren. Ich persönlich würde gerne sehen, dass VBox nur das verwendet, was es benötigt, aber ich bin mir einig, dass es wichtig ist, dass es in der Lage ist, so viel zu verwenden, wie es erwartet, daher das Ring-Fencing.

Rob Vanstone
quelle
1

Könnte mit den VirtualBox Guest Additions zusammenhängen.

Meine Ubuntu-Installation verwendet derzeit ~ 20 MB, wie von WinXP gemeldet. Dies ist mit VBoxAdditions.

Meine Lubuntu-Installation verwendet derzeit ~ 90 MB, wie von WinXP gemeldet. Einfach installiert; VBoxAdditions wurden nicht installiert.

Die Speichernutzung hängt davon ab, was die VM tut. Ich habe meine Ubuntu-Installation mit ziproxy; Wenn ich etwas mache, das mit ziproxy kommuniziert, nimmt die Speichernutzung mit zunehmender Nutzung der VM um einige Megabyte zu.

Im Allgemeinen ist die Virtualisierung jedoch so weit fortgeschritten, dass die für den Gast erkennbaren Spezifikationen nicht vollständig vom Host zugewiesen werden müssen. Scheint dynamische Zuordnung und starkes Paging zu verwenden.

helfende Hand
quelle
1

Es gibt hier also einige große Unterschiede. Ich verstehe wirklich nicht, wie das GuestOS 400+ MB verwenden kann, während das Host-Betriebssystem nur ungefähr 75 MB anzeigt, die der VM zugewiesen sind. Gibt es andere von VirtualBox verwendete Prozesse, die nicht so offensichtlich benannt sind?

Sie suchen, was wird verwendet , auf dem Host, nicht das, was wird zugewiesen . Der Gast verwendet (noch) nicht mehr als 400 MB RAM des Hosts.

Außerdem würde ich gerne wissen, ob ich einen Computer mit 1 GB betreibe. Wird dies meinem Host-Betriebssystem 1 GB entziehen oder nur die Menge an Speicher, die der Gastcomputer derzeit verwendet?

Es reserviert 1 GB RAM, es wird jedoch möglicherweise deutlich weniger RAM verbraucht. Wenn der Gast einen Teil dieses Speichers nicht verwendet, kann der Host-RAM für viele andere Zwecke verwendet werden (z. B. zum Zwischenspeichern sauberer Datenträgerseiten), obwohl er für den Gast reserviert ist. Und selbst wenn der Gast einen Teil dieses Speichers verwendet, kann er durch opportunistisches Austauschen aus dem physischen Speicher entfernt werden, wenn er nicht ausreichend lange darauf zugreift.

Leider sind Sie in ein äußerst komplexes Thema geraten, und es würde viele Seiten dauern, um es wirklich zu erklären. Die Antworten auf diese Frage enthalten viele falsche Informationen.

David Schwartz
quelle
0

Sie können es mit der großartigen Anwendung VMMap von SysInternals sehen :

  1. Zuerst müssen Sie den richtigen Prozess finden, also starten Sie zum Beispiel Process Hacker oder den Process Explorer von SysInternals
  2. Zeigen Sie die Liste der Prozesse als Baum an
  3. Suchen Sie den Prozess VBoxSVC.exe. Er sollte mehrere untergeordnete Prozesse haben, VBoxHeadless.exewenn eine VM ausgeführt wird
  4. Wenn mehrere VMs ausgeführt werden, gibt es mehrere Zweige von VBoxHeadless.exeProzessen. Wählen Sie den richtigen Zweig aus, indem Sie die Befehlszeile des Prozesses überprüfen. Sie enthält eine Kennung Ihrer VM
  5. Sie interessieren sich für den niedrigsten VBoxHeadless.exeWert in der Branche (dh er hat keine Kinder mehr, nur einen Elternteil, also ein Blatt). Erinnern Sie sich an die PID
  6. Starten Sie VMMap
  7. Wählen Sie den richtigen VBoxHeadless.exeProzess anhand seiner PID aus und klicken Sie auf OK

In meinem Fall berichtet alle privaten Bytes , Arbeitssatz und Committed Speicher von VMMap fast genau die Größe des Speichers an die VM in VirtualBox zugewiesen übereinstimmen.

Dawid Ferenczy Rogožan
quelle