Warum verwendet Windows immer so viel virtuellen Speicher, wie RAM installiert ist?

Warum verwendet Windows immer so viel virtuellen Speicher, wie RAM installiert ist?

Und warum will es maximal die doppelte Menge davon haben? Mein System hat 32 GB RAM und Windows legt standardmäßig mindestens 16 MB virtuellen Speicher fest, weist 32 GB(!) zu und empfiehlt 50 GB(!!). Noch schlimmer ist es auf einem System mit 64 GB RAM, wo es die Zuweisung von über 100 GB empfiehlt, obwohl es „nur“ noch einmal dieselbe Menge verwendet, die im RAM verfügbar war, in diesem Fall 64 GB.

Soweit ich das Konzept der Auslagerungsdatei verstanden habe, besteht es darin, dass Windows sie nur bei Bedarf erweitert und mit der Mindestgröße beginnt, obwohl dies nie der Fall ist, sondern immer bis zum absoluten Maximum geht. Das ist extrem ärgerlich, denn wenn man die Auslagerungsdatei deaktiviert oder sie nicht auf die gleiche Größe wie den installierten RAM einstellt, verursacht das bei einigen Programmen, die viel Speicher verwenden, wie z. B. 7zip, Probleme. Sie behaupten einfach, dass nicht genug Speicher zum Zuweisen vorhanden ist, obwohl mehr als genug freier, nutzbarer Speicher vorhanden ist.

Dieses Verhalten verkürzt möglicherweise die Lebensdauer meiner Laufwerke (SSDs) enorm. Warum macht Windows das und wie kann ich das verhindern oder alternativ die Auslagerungsdatei vollständig deaktivieren, ohne dass es bei einigen Programmen zu seltsamem Verhalten kommt.

Antwort1

Erstens ist es ein großer Fehler (nicht Ihrer), dass der Windows-Dialog, in dem Sie die Größe der Auslagerungsdatei festlegen, die Auslagerungsdatei mit „virtuellem Speicher“ gleichsetzt. Die Auslagerungsdatei ist lediglich der Sicherungsspeicher für eine Kategorie des virtuellen Adressraums, der von privatem, festgeschriebenem Speicher verwendet wird. Es gibt virtuellen Adressraum, der von anderen Dateien (zugeordneten Dateien) unterstützt wird, und es gibt VAS, der immer nicht auslagerbar ist und daher immer im RAM bleibt. Aber es ist alles „virtueller Speicher“, da zumindest immer eine Übersetzung von virtuellen in RAM-Adressen erfolgt.

Ihre Beobachtung ist richtig: Die Zuweisung der Auslagerungsdateigröße durch Windows erfolgt auf Basis einer einfachen Berechnung von Standard = RAM-Größe und Maximum = doppelt so viel. (Früher waren es 1,5x und 3x.) Sie müssen den Wert auf einen Wert einstellen, und diese Faktoren liefern ein Ergebnis, das fast immer ausreicht. Außerdem wird dadurch genügend Speicherplatz für die Auslagerungsdatei garantiert, um bei einem Systemabsturz einen Speicherauszug abzufangen (vorausgesetzt, Sie haben Kernel- oder vollständige Speicherauszüge aktiviert).

Das Konzept der Auslagerungsdatei ist meines Wissens nach so, dass Windows sie nur bei Bedarf erweitert und mit der Mindestgröße beginnt, dies jedoch nie tut, sondern immer das absolute Maximum erreicht.

Ah... es beginnt mit der „Anfangsgröße“. Dies ist NICHT das „zulässige Minimum“. Deshalb sehen Sie es bei Ihrer RAM-Größe, weil Windows diese als Anfangsgröße verwendet.

Aber ... meinen Sie damit, dass die tatsächliche Größe der Auslagerungsdatei auf die Maximaleinstellung zurückgeht? Wenn sie beispielsweise anfänglich auf 16 GB und maximal auf 32 GB eingestellt ist, sehen Sie dann die tatsächliche Größe („aktuell zugewiesen“) bei 32 GB? Beim Neustart sollte sie übrigens immer auf die Anfangsgröße zurückgesetzt werden.

Sehen Sie Popups mit der Meldung „Der virtuelle Speicher des Systems geht zur Neige“? Das sollten Sie, wenn das Betriebssystem die Auslagerungsdatei über die aktuelle Größe hinaus erweitert.

Das Betriebssystem wird die Auslagerungsdatei nicht vergrößern, es sei denn, etwas hat tatsächlich versucht, so viel privaten, festgeschriebenen Speicher zuzuweisen, dass es den vergrößerten Speicherplatz der Auslagerungsdatei zum Speichern des Materials benötigt. Aber vielleicht hat etwas versucht. Sehen Sie sich die Registerkarte „Prozesse“ im Task-Manager an. Die Spalte „Festgeschriebene Größe“ zeigt dies für jeden Prozess an. Klicken Sie auf die Spaltenüberschrift, um zu sehen, wer der Fresser ist. :)

Das ist äußerst ärgerlich, da das Deaktivieren der Auslagerungsdatei oder das Nichteinstellen derselben auf die gleiche Menge wie der installierte RAM bei einigen Programmen mit hohem Speicherbedarf (z. B. 7zip) zu Problemen führt. Diese behaupten dann einfach, dass nicht genügend Speicher zum Zuweisen vorhanden sei, obwohl mehr als genug freier, nutzbarer Speicher vorhanden ist.

Dies hat nichts mit dem verfügbaren RAM zu tun, sondern mit etwas, das „Commit Charge“ und „Commit Limit“ genannt wird. Das „Commit Limit“ ist die Summe aus (RAM – nicht auslagerbarer virtueller Speicher) + aktueller Auslagerungsdateigröße. (Kein freier RAM, nur RAM.) Ein System mit beispielsweise 8 GB RAM und 16 GB aktueller Auslagerungsdatei hätte also ein Commit Limit von etwa 24 GB („etwa“, weil der RAM, der nicht auslagerbare Inhalte enthält, nicht zum Commit Limit zählt).

Die „Commit-Gebühr“ gibt an, wie viel privater Adressraum derzeit im System vorhanden ist. Dieser muss kleiner sein als das Commit-Limit, sonst kann das System nicht garantieren, dass die Sachen einen Platz haben.

Auf der Registerkarte „Leistung“ des Task-Managers können Sie diese beiden Zahlen mit der Legende „Commit (GB)“ sehen. Ich sehe mir beispielsweise eine Maschine an, auf der „Commit (GB) 1/15“ steht. Das ist 1 GB aktuelle Commit-Last von einem Limit von 15 GB.

Wenn ein Programm wie 7zip beispielsweise versucht, eine VirtualAlloc mit einer Größe > (CommitLimit - CommitCharge) auszuführen, also größer als das „verbleibende“ Commit-Limit, schlägt die Zuordnungsanforderung fehl, wenn das Betriebssystem die Auslagerungsdatei nicht erweitern kann, um das Commit-Limit groß genug zu machen. Das ist, was Sie gerade sehen. (Windows hat eigentlich keine Fehlermeldung für „wenig physischen Speicher“, nicht für den Benutzermoduszugriff! Nur für virtuell.)

Es hat nichts zu tun mitfreiRAM, da der gesamte RAM (abzüglich des winzigen Teils, der nicht auslagerbar ist) auf das Commit-Limit angerechnet wird, unabhängig davon, ob er aktuell frei ist oder nicht.

Das ist verwirrend, denn wenn Sie sich das System nach einem dieser Zuordnungsfehler ansehen, ist scheinbar nichts falsch - Sie sehen sich das System an, Ihre Commit-Ladung liegt weit unter dem Grenzwert, Sie haben möglicherweise sogar viel freien RAM. Sie müssten wissen, wie viel privaten, festgeschriebenen Speicher das Programm zuzuweisen versucht hat, um das Problem zu erkennen. Und die meisten Programme sagen es Ihnen nicht.

Für mich klingt es so, als ob 7zip beim Zuweisen von VAS viel zu aggressiv vorgeht. Vielleicht skaliert es seine Anfragen basierend auf Ihrer RAM-Größe? Sind Sie sicher, dass es keine kleinere Auslagerungsdateieinstellung gibt, mit der 7zip zufrieden wäre? Verwenden Sie die 32-Bit- oder die 64-Bit-Version von 7-Zip? Die Verwendung der 32-Bit-Version würde das Problem beheben, da sie unmöglich mehr als 2 oder vielleicht 3 GB virtuellen Adressraum verwenden kann. Natürlich könnte es bei riesigen Datensätzen nicht so schnell sein.

Dieses Verhalten verkürzt die Lebensdauer meiner Laufwerke (SSDs) möglicherweise enorm.

Nun, nein, nicht wirklich. Einfach eine Auslagerungsdatei beliebiger Größe dort abzulegen, bedeutet nicht, dass das System tatsächlich so viel in die Auslagerungsdatei schreibt. (Es sei denn, Sie haben die Option „Auslagerungsdatei beim Herunterfahren löschen“ eingestellt, und selbst dann glaube ich nicht, dass es die ganze Datei schreibt; das Mm weiß, welche Blöcke verwendet werden, und sollte nur diese schreiben ... Daran habe ich noch nie gedacht; ich muss das überprüfen.)

Wenn Sie sehen möchten, wie viel Inhalt sich tatsächlich in Ihrer Auslagerungsdatei befindet, verwenden Sie das Dienstprogramm PerfMon. Es gibt eine Zählergruppe für Auslagerungsdateien, und Sie möchten natürlich den Zähler „% Nutzung“. Interpretieren Sie diesen Prozentsatz anhand der tatsächlichen Größe der Datei (wie im Explorer angezeigt).

Es verbraucht wirklich viel Platz und da der Platz auf einer SSD ziemlich teuer ist, ist dies für die meisten von uns ein Problem. Sie könnten beispielsweise versuchen, eine Auslagerungsdatei mit angemessener Größe, beispielsweise 4 oder 8 GB, auf Ihrer SSD zu speichern, dann ein rotierendes Rust-Laufwerk anzuschließen und eine große Auslagerungsdatei darauf zu speichern. Oder wenn Sie eine SSD und sonst nichts für Ihre Auslagerungsdatei möchten, kaufen Sie eine billige kleine nur für die zweite Auslagerungsdatei.

verwandte Informationen