Lassen Sie mich zunächst sagen, dass Sie nicht alleine sind. Dies ist sicherlich die häufigste Frage in den Bereichen "Windows" + "Speicher". Es könnte in allen SuperUser in den Top Ten sein. Und ich beschuldige Microsoft, dass er die Dinge nicht gut erklärt hat, weil er keine guten, konsistenten Namen für Metriken über mehrere Displays hinweg verwendet und trotz dieser "Beliebtheit" keine leicht zu findende Antwort auf diese Frage gibt.
Kurz gesagt, Ihre Verwirrung ist verständlich, sogar erwartet. Es ist nicht deine Schuld.
Die schnelle Antwort
Wenn Sie sehen, „out of memory“, „wenig Speicher“ usw., Pop-ups von Windows Sie wirklich, wirklich, wirklich brauchen eine Auslagerungsdatei haben. Oder vergrößern Sie die Größe, die Sie bereits haben.
(Oder fügen Sie mehr RAM hinzu, aber das ist nicht so einfach. Oder versuchen Sie, weniger oder kleinere Programme gleichzeitig auszuführen, aber das will niemand.)
Ich habe es deaktiviert, weil ich eine 250 GB SSD habe.
Tut mir leid, stumpf zu sein, aber das macht keinen Sinn. Wenn Sie gesagt hätten "... weil ich 64 GB RAM habe", wäre das sinnvoll. Könnte sein. Eine SSD zu besitzen bedeutet jedoch nicht, dass Sie keine Auslagerungsdatei benötigen.
Selbst mit 64 GB RAM kann nicht garantiert werden, dass Sie keine Auslagerungsdatei benötigen!
Diese Fehlermeldung sagt Ihnen tatsächlich, dass Sie unbedingt eine Auslagerungsdatei benötigen. (Oder mehr RAM ... oder Sie müssen gleichzeitig weniger und / oder kleinere Sachen ausführen.)
Ja, ich weiß. Sie möchten keine Auslagerungsdatei auf Ihrer SSD ablegen. Ich werde das am Ende ansprechen.
Wenn es "aus der Erinnerung" sagt, bedeutet das nicht, was Sie denken, es bedeutet
Diese Fehlermeldung wird ausgelöst, wenn das sogenannte "Commit Limit" und nicht der RAM ausgeht. "Committed" oder "Private Committed", um ihm seinen vollen Namen zu geben, ist eine Art virtueller Speicher in Windows. Sie wissen wahrscheinlich, dass sich der Inhalt des "virtuellen Speichers" entweder im RAM befindet oder, falls nicht genügend Platz vorhanden ist, ein Teil davon auf der Festplatte (oder SSD) aufbewahrt wird. Bei "Private Festgeschriebener virtueller Speicher" wird die Seitendatei auf der Festplatte gespeichert. Wenn du eine hast.
(Es gibt auch einen "zugeordneten" virtuellen Speicher, der anstelle der Auslagerungsdatei andere Dateien für das Paging verwendet, und es gibt einen nicht auslagerbaren virtuellen Speicher, der ständig im Arbeitsspeicher verbleiben muss. Nicht-auslagerbare vm trägt zur "Festschreibegebühr" bei, wenn Sie dies tun zu viel davon kann zur Fehlermeldung "out of memory" beitragen. Der zugeordnete Speicher trägt nicht so dazu bei, daher werde ich hier nicht weiter darauf eingehen.)
Was ist, wenn Sie keine Auslagerungsdatei haben? Ihre Programme können weiterhin einen privaten, festgeschriebenen virtuellen Speicher erstellen. Aber dann alle engagierten virtuellen Speicher, die geschrieben worden ist, seit es wurde zum ersten Mal vergeben hat im RAM zu jeder Zeit ... bleiben, bis sie freigegeben ist ( in der Regel durch den Prozess endet, die es erstellt wurde ) ... Denn es gibt keinen anderen Ort für Windows behalte es.
Die „commit limit“ - das heißt, wie viel Engagement, geschrieben zu-at-dest einmal die virtuelle Speicher, die Sie können haben - ist daher einfach die Größe Ihres RAM plus die aktuelle Größe der Auslagerungsdatei. (Wenn Sie die Auslagerungsdateierweiterung aktiviert haben, vergrößert sich das Festschreibungslimit, wenn die Auslagerungsdatei dies tut.)
Wenn Sie den Task-Manager, die Registerkarte Leistung in Windows 7 betrachten, sehen Sie einen Hinweis, der wie folgt aussieht:
Commit (MB) 893 / 4095
Dies bedeutet, dass meine Commit-Gebühr 893 MB beträgt und mein Commit-Limit 4095 MB beträgt, dh 4 GB. (Dies ist von einer virtuellen Maschine, auf der Windows 7 ausgeführt wird. Sie verfügt über 2 GB "RAM" und eine 2 GB-Auslagerungsdatei - das Festschreibungslimit beträgt also 4 GB.)
Die Fehlermeldung "Nicht genügend Arbeitsspeicher" wird angezeigt, wenn ein Programm versucht, den festgeschriebenen virtuellen Speicher zuzuweisen, und die Anforderung kann nicht gewährt werden, da die "Festschreibegebühr" des Systems bereits an oder in der Nähe der "Festschreibungsgrenze" liegt - nahe genug, dass die Anforderung, wenn gewährt, würde nehmen begehen über die Grenze.
Beachten Sie, dass diese Nachricht nur angezeigt wird, nachdem die Anforderung zum Festschreiben bereits ausgeführt wurde und fehlgeschlagen ist. Wenn Sie sich den Task-Manager ansehen, ist der Grund für das Problem möglicherweise nicht ersichtlich.
Angenommen, Sie hatten noch 1 GB Festschreibungslimit und etwas versucht, 1,5 GB in einem Aufruf zuzuweisen. (Dies ist ungewöhnlich, kann jedoch vorkommen.) Der Speichermanager lehnt die Anforderung ab und das Popup wird angezeigt. Wenn Sie sich jedoch den Task-Manager ansehen, wird Ihre Commit-Gebühr immer noch dort angezeigt, wo sie zuvor war. 1 GB ist noch nicht belegt! Verwirrend. Der Task-Manager, der Ressourcenmonitor oder auch der Systemmonitor enthalten keine Informationen darüber, wie viel angefordert wurde.
(Das Process Monitor-Tool von sysinternals.com könnte hier helfen.)
Diese Fehlermeldung sollte eigentlich etwas wie "Versuch der Festschreibung (Umfang der Anforderung) würde das Festschreibungslimit überschreiten" lauten. Dies würde zwar erforderlich sein, um nachzuschauen, was "Festschreibungslimit" bedeutet, aber es wäre viel nützlicher. Nun gut, dies ist bei weitem nicht die einzige nicht-so-hilfreiche-wie-es-Fehlermeldung, die sich in Windows befindet - oder in einem anderen Betriebssystem, das ich jemals verwendet habe. (Sie könnten zumindest mehr Details in das Systemereignisprotokoll aufnehmen!)
Wenn Sie unter Windows über "Speicher" sprechen, sollten Sie dies immer qualifizieren. Sprechen Sie über "virtuellen Speicher" oder "physischen Speicher"? Viele Leute sagen "Gedächtnis", wenn sie es auch meinen könnten. Und viele Leute sagen "RAM", wenn sie wirklich über virtuellen Speicher sprechen. Dies trägt nur zur Verwirrung aller bei.
Wie ich bereits gesagt habe, ist das, was bei der Festschreibungsgebühr gezählt wird, eine Art virtueller Speicher. Das Festschreibungslimit ist die maximale Menge des Typs des virtuellen Speichers, den Sie haben können. Sie können das Commit-Limit erhöhen, indem Sie mehr RAM hinzufügen und / oder die Größe der Auslagerungsdatei erhöhen.
Aber ich habe viel RAM!
Ich kann nicht verstehen, warum ich virtuellen Speicher mit 12 GB RAM verwenden muss.
Das ist eine völlig verständliche Frage. Und sehr häufig. Und wieder beschuldige ich Microsoft, dass er die Dinge nicht besser erklärt.
Kurz gesagt: Sie benötigen eine Auslagerungsdatei, da Ihre Workload versucht, mehr "festgeschriebenen virtuellen Adressraum" zuzuordnen, als Sie über RAM verfügen.
Erstens, Terminologie: Windows verwendet immer virtuellen Speicher, unabhängig davon, ob Sie eine Auslagerungsdatei haben oder nicht. Durch das Entfernen der Auslagerungsdatei wird das Auslagern auf die Festplatte für festgeschriebenen virtuellen Speicher einfach ausgeschlossen . Die festgeschriebene VM ist immer noch vorhanden und ist in jeder Hinsicht immer noch virtuell, außer dass sie auf die Festplatte übertragen werden kann.
Ein anderer wichtiger Typ von virtuellem Speicher, die Sortierung "Mapped Memory", führt die Seite weiter. Nur nicht zur Seitendatei.
Sie fragen sich also: Warum gehen Sie bei einem Arbeitsspeicher von 12 GB das Festschreibungslimit aus?
Nun, das wäre, weil, wie viel Sie bereits verwenden, und die Größe eines Betrags, nach dem ein Programm verlangt, Ihr Commit-Limit überschreitet.
Sie können diese Meldung auch sehen, wenn Sie über ausreichend RAM verfügen, der im Task-Manager angezeigt wird. Umgekehrt sehen Sie die Nachricht möglicherweise nicht - dh ein Commit-Versuch kann erfolgreich sein - auch wenn Sie wenig "verfügbaren" RAM haben. Weil es nicht über verfügbaren RAM beschwert. Es klagt über das Fehlen eines Commit-Limits.
Ihr Programm versucht möglicherweise, große Mengen an reserviertem virtuellem Speicher zuzuweisen. Oder Sie haben etwas anderes ausgeführt, das das Festschreiben verbraucht.
Nun, das ist eine lustige Sache: Wenn ein Prozess einen fest zugewiesenen Speicher zuweist, verwendet dies eigentlich nicht den Arbeitsspeicher in Höhe des festgeschriebenen Betrags. Weil es virtuell ist, erinnerst du dich? Tatsächlich ist für das Festschreiben des virtuellen Speichers sehr wenig RAM erforderlich, auch ohne Auslagerungsdatei. Ich sage nur "Ich möchte vielleicht bis zu" "diesem viel zugesagten virtuellen Speicher verwenden. Windows, können Sie mir (" Commit ") versprechen, dass so viel verfügbar ist, auch wenn ich alles benutze? "
Erst wenn das Programm tatsächlich in den festgeschriebenen Speicher schreibt, indem es darauf zugreift und so zu Seitenfehlern führt, wird der RAM tatsächlich aus dem "available" -Zähler entfernt und zu "in use" hinzugefügt. Dies geschieht seitenweise. Wenn Sie innerhalb des festgeschriebenen Bereichs auf 10 Seiten (jeweils 4 KB) schreiben, werden 10 RAM (40 KB) benötigt.
(Es würde passieren, wenn Sie auch aus ihm lesen, aber es macht wenig Sinn, aus dem neu zugewiesenen virtuellen Speicher zu lesen, bevor Sie in ihn schreiben.)
Sehr oft greift das Programm niemals auf alle von ihm festgeschriebenen privaten VMs zu. In diesem Fall entspricht der verwendete RAM-Speicher nicht dem festgeschriebenen Betrag. (Und bei einem System mit einer Auslagerungsdatei könnten einige der "Festgeschriebenen" Sachen in die Auslagerungsdatei verschoben werden, um mehr Platz im RAM für andere Dinge zu schaffen ... wodurch der von der festgeschriebenen Region verwendete RAM weiter reduziert wird.)
Windows kann jedoch nicht wissen, wie viel von der zugesagten Region verwendet wird. Bei der Allokation bleibt nichts anderes übrig, als davon auszugehen, dass ich möglicherweise alles davon benutze. Dies bedeutet, dass insgesamt 1 GB Speicherplatz erforderlich ist, um den gesamten Speicherplatz zu erhalten (möglicherweise etwas davon in der Auslagerungsdatei und der Rest im Arbeitsspeicher).
Daher kann diese Anforderung nicht erteilt werden, es sei denn, alle aktuellen "Festschreibungszuweisungen" zusammen mit der neuen Zuteilung würden unter dem Festschreibungslimit liegen.
Wenn die Anforderung trotzdem erteilt wurde, besteht die Gefahr, dass der Arbeitsspeicher knapp wird, dh ein Seitenfehler kann nicht behoben werden, da kein Arbeitsspeicher verfügbar war. Das ist ein sehr ernstes Problem. Es ist sowohl für das Betriebssystem als auch für Anwendungsprogrammierer viel einfacher, die Begrenzung durchzusetzen, wenn das Programm versucht, den virtuellen Speicher festzuschreiben.
Für mehr Infos (als ob das nicht schon lange genug wäre)
Weitere Informationen dazu, die auf unterschiedliche Weise erläutert werden, finden Sie in zwei meiner anderen Antworten: Hier wird (länger) eine Analogie zu "Darlehen von der Bank" verwendet, die einige Leute als wirksam befunden haben. Dieses (viel länger) hat eine formalere Erklärung für das, was im Betriebssystem passiert. Wenn Sie ein und dasselbe Konzept auf verschiedene Weise präsentieren, können Sie oft an einem kritischen Punkt vorbeikommen.
Über die Auslagerungsdatei vs. die SSD
Dies ist ein Nebenproblem, also habe ich es hier runter verschoben ...
Alle Webseiten über SSD weisen explizit darauf hin, den virtuellen Speicher zu deaktivieren, um Festplattenverschleiß zu vermeiden
Sorry, aber nein, das sagen nicht alle, und die, die das tun, sind einfach falsch. Moderne SSDs verarbeiten Petabytes von Schreibvorgängen, bevor sie Probleme aufzeigen. Und von Support und Q & A für Solid-State-Laufwerke (MSDN) :
Soll die Auslagerungsdatei auf SSDs abgelegt werden?
Ja. Bei den meisten Seitendatei-Operationen handelt es sich um kleine zufällige Lesevorgänge oder größere sequentielle Schreibvorgänge. Beide Arten von Operationen werden von SSDs gut verarbeitet.
Beim Betrachten von Telemetriedaten aus Tausenden von Spuren und beim Fokussieren auf Lesen und Schreiben von Auslagerungsdateien finden wir das
Pagefile.sys liest outnumber pagefile.sys schreibt etwa 40 zu 1,
Pagefile.sys-Lesegrößen sind normalerweise recht klein, wobei 67% weniger als oder gleich 4 KB und 88% weniger als 16 KB sind.
Pagefile.sys-Schreibvorgänge sind relativ groß, wobei 62% größer oder gleich 128 KB sind und 45% genau 1 MB groß sind.
Angesichts der typischen Referenzmuster für Auslagerungsdateien und der günstigen Leistungseigenschaften, die SSDs für diese Muster aufweisen, gibt es wenige Dateien, die besser sind als die Auslagerungsdatei, die auf einer SSD abgelegt werden kann.
Noch eine überraschende Tatsache: Obwohl Sie möglicherweise eine Auslagerungsdatei benötigen, um dem System die Möglichkeit zu geben, diese Anforderungen zu erteilen, gibt es möglicherweise sehr wenig oder gar nichts, was tatsächlich in die Auslagerungsdatei geschrieben wurde. Dies ist auch deshalb so, weil es normalerweise einen großen Unterschied gibt, wie viel virtueller Speicher belegt wird und wie viel tatsächlich verwendet wird. Mit verwendet meinen wir "geschrieben in und RAM-Seiten entsprechend zugewiesen". Nur private festgeschriebene vm, auf die tatsächlich geschrieben wird, werden jemals in die Auslagerungsdatei geschrieben. Die meisten modernen Systeme (wie Ihres mit 12 GB RAM) schreiben und lesen die Auslagerungsdatei nicht sehr. Trotzdem ist die Auslagerungsdatei häufig notwendig, damit die virtuellen Zuordnungen erfolgreich sind. Und vielleicht beruhigt das Ihre Entscheidung, es auf Ihre SSD zu legen.