Windows 10 Warnungen zu wenig Arbeitsspeicher, wenn genügend Arbeitsspeicher verfügbar ist

25

Ich hatte ein Problem, bei dem, wenn mein System für ein paar Tage ohne Neustart ausfällt, Warnungen angezeigt werden, in denen "Programme schließen, um Informationsverlust zu verhindern" und anschließend ein Dialogfeld angezeigt wird, in dem vorgeschlagen wird, Programme zu schließen, die ich entweder abbrechen oder drücken kann "Programme schließen" und Windows erzwingt das Schließen einiger oder aller im Dialogfeld aufgelisteten Anwendungen.

Ich öffne den Task-Manager und stelle fest, dass derzeit nur etwa 30% meines Speichers verwendet werden:

33% Auslastung

Wenn ich den Ressourcenmonitor öffne, um zu sehen, wie viel festgeschriebener Speicher von bestimmten Anwendungen verwendet wird, sehe ich immer noch eine relativ geringe Speichernutzung:

Ressourcenmonitor

Ich hatte dieses Problem für eine Weile und habe versucht, eine Lösung zu finden. Ich habe Ursachen wie ein Treiberleck mithilfe von Poolmon untersucht, aber noch nie etwas in Poolmon gesehen, das mit dem übereinstimmt, was andere als rote Fahnen für ein Treiberleck beschrieben haben. Was mich besonders verwirrt, ist, warum mir Win10 sagt, dass ich Anwendungen schließen soll, wenn nur 33% des Systemspeichers verwendet werden.

Brandon
quelle
3
Rufen Sie den Task-Manager auf und wechseln Sie zur Registerkarte Leistung. Was zeigt das festgeschriebene Speicherfeld ?
DrZoo
Ich habe keinen Screenshot dafür gespeichert, aber mein festgeschriebener Speicher war ein hoher Prozentsatz der verfügbaren, etwa 17,5 GB / 19 GB.
Brandon

Antworten:

15

Wilde Vermutungen hier.

Sie haben Ihre Auslagerungsdatei nach einem zufälligen "Optimierungs" -Ratschlag deaktiviert.

Sie haben einen Betriebssystemtreiber, der einen großen Block aufeinanderfolgenden physischen Arbeitsspeichers benötigt. Aber es kann es nicht bekommen, weil der gesamte physische RAM im Laufe der Zeit fragmentiert wurde. Und da die Auslagerungsdatei deaktiviert ist, kann sie keine RAM-Defragmentierung durchführen.

Aktivieren Sie Ihre Auslagerungsdatei.

Wie gesagt, wilde Vermutung.

Zan Lynx
quelle
Nun, ich habe eine festgelegte Auslagerungsdatei-Größe von maximal 3 GB. Ist dies das, was Sie mit Swapfile meinen, oder ist dies eine separat verwaltete Sache in Windows 10? Es ist nicht unmöglich, dass ich so etwas getan hätte. Als ich diese Maschine 10/2015 zum ersten Mal baute, hatte ich extrem schlechte Performance-Probleme und versuchte verschiedene Dinge wie das Deaktivieren des Core-Parkings, um das Problem zu beheben. Am Ende gab es ein Energieverwaltungsschema, das meine Energie auf 10% reduzierte und alle Komponenten aushungerte. Aus diesem Grund hatte ich systembedingte Leistungsprobleme, aber es ist möglich, dass ich etwas getan habe, wie Sie in dieser Episode gesagt haben.
Brandon
1
Wenn Sie die Größe Ihrer Auslagerungsdatei auf "System Managed" ändern, werden Ihre Probleme wahrscheinlich behoben.
Scott Chamberlain
Ich hatte es einmal System verwaltet, und ich hatte immer noch das gleiche Problem, es würde nur länger dauern, um zu manifestieren. Wenn ich es auf "System verwaltet" stellte, war die Auslagerungsdatei meines Erachtens maximal 64 GB groß, und wenn das Commit wirklich hoch war, bekam ich immer noch die gleichen Warnungen zu wenig Arbeitsspeicher. Aber ich würde immer noch ungefähr 70% physischen Arbeitsspeicher zur Verfügung haben und keinen Hinweis in Resource Monitor darauf, dass derzeit mehr als 60 GB Arbeitsspeicher für einen der aufgelisteten Prozesse festgeschrieben sind.
Brandon
Ich stimme voll und ganz Zan und Scott zu, es ist Ihre Auslagerungsdatei, die dieses Problem verursacht (siehe windowsitpro.com/windows-10/… für eine andere Quelle, die dies ebenfalls sagt). Wenn das Problem erneut auftritt, beginnen Sie mit der Untersuchung.
ƬᴇcƬᴇιᴇ007
Ich denke also, dass die systemgesteuerte Auslagerungsdatei die Kernantwort hier war. Es scheint, dass es in der Windows 10-Umgebung einfach nicht ideal ist, wenn es auf statische 3 GB eingestellt ist. Ich habe diese Lösung vor ein paar Wochen implementiert und sie im normalen Betrieb laufen lassen, um zu sehen, was passiert ist. Obwohl ich immer noch viel mehr festgeschriebenen Speicher sehe, als in der Spalte "Ressourcenmonitor festgeschriebener Speicher" angegeben ist, geht mir nicht der Speicher aus Warnungen oder Probleme jetzt.
Brandon
14

Zu Ihrer letzten Frage - der Kurzversion: Die Fehlermeldung bezieht sich auf den "festgeschriebenen" virtuellen Adressraum. Wenn Sie sich das Commit Charge-Diagramm in Ihrem zweiten Bildschirm-Schnappschuss ansehen, werden Sie feststellen, dass es tatsächlich am oder sehr nahe am Limit liegt.

Die Größe des Arbeitsspeichers, der "frei", "verfügbar" oder "in Verwendung" ist, spielt keine Rolle. Insbesondere ein Mangel an "verfügbarem" RAM ist absolut nicht der Grund für die Meldung "Wenig Speicher" oder "Nicht genügend Speicher".

Das Commit-Limit entspricht der Gesamtgröße von RAM + Auslagerungsdatei. Wenn ein festgeschriebener Speicher zugewiesen wird, wird dieser sofort mit "Festschreibungsgebühr" berechnet, obwohl er noch nicht tatsächlich verwendet wurde. Dies bedeutet, dass kein RAM- oder PF-Speicherplatz sofort verwendet wird. Der physische Speicherplatz (im RAM oder in der Auslagerungsdatei) wird nur verwendet, wenn tatsächlich auf den Speicher verwiesen wird. Von da an muss es irgendwo sein, bis das Programm es freigibt oder der gesamte Prozess endet.

Beispiel: Angenommen, Sie haben keine Auslagerungsdatei, daher beträgt Ihr Commit-Limit 16 GB (Ihre RAM-Größe). Angenommen, 8 Prozesse versuchen jeweils, VirtualAlloc (MEM_COMMIT) 1 GB zuzuweisen. Ergebnis: Die Commit-Gebühr erhöht sich um 8 GB. Es gibt jedoch keine unmittelbaren Auswirkungen auf den Arbeitsspeicher! Es ist, als ob Sie einen Block Papier im Schreibwarenladen gekauft hätten, aber Sie haben tatsächlich kein Papier bekommen. Jedes Mal, wenn Sie ein neues Blatt benötigen, erscheint eines auf magische Weise. Bis Sie das gesamte Pad verbrauchen (die Größe der zugewiesenen Region).

Angenommen, jeder dieser Prozesse greift tatsächlich nur auf 100 MB von 1 GB zu. Der verwendete RAM wäre nur 800 MB.

Aber da jeder von ihnen könnte all sein 1 GB verweist, hat das Betriebssystem , um sicherzustellen , dass 8 GB RAM + Auslagerungsdatei Raum ... na ja, das RAM nur in dem Fall ohne Auslagerungsdatei ... nur für den Fall zur Verfügung gehalten wird, was geschieht , . Wenn sie zum Papiergeschäft zurückkehren, müssen sie genügend Papier vorrätig haben, um jedem so viele Blätter wie zuvor zu geben.

Dementsprechend muss das Betriebssystem die erfolgreiche Ausführung von VirtualAlloc (MEM_COMMIT) beenden, wenn der aktuell festgeschriebene Betrag das Limit erreicht.

Warum? Da erwartet wird, dass der Prozess das Ergebnis von VirtualAlloc überprüft, um festzustellen, ob es erfolgreich war. Sobald dies geschehen ist und festgestellt wurde, dass die Zuweisung erfolgreich war, hat der Prozess das Recht zu erwarten, dass die nachfolgenden Verweise auf die gesamte festgeschriebene Region erfolgreich sein werden.

Wenn Windows zulässt, dass die Festschreibegebühr den verfügbaren Speicherplatz überschreitet, um diesen Speicherplatz zu realisieren, kann diese Erwartung nicht immer erfüllt werden.

Eine schnelle Problemumgehung besteht darin, die Standardgröße (= anfängliche Größe) Ihrer Auslagerungsdatei zu erhöhen. Anhand der obigen Erklärung sollten Sie erkennen können, warum die Fehlermeldung dadurch vermieden wird , obwohl möglicherweise nie etwas in diese Datei geschrieben wird . Auch hier stellt das Betriebssystem sicher, dass Speicherplatz für die gesamte Festschreibegebühr zur Verfügung steht, falls diese benötigt wird . Wenn Prozesse festgeschriebenen Speicher zuweisen, sagen sie nur: "Hey, Betriebssystem, ich brauche möglicherweise so viel." Das bedeutet nicht, dass sie es tatsächlich benutzen werden, und es bedeutet sicherlich nicht, dass sie es tatsächlich schon benutzt haben.

Weitere Antworten finden Sie hier .

Nun ... warum Sie so viel Commit verwenden, wenn sich Ihre Prozesse nicht zu summieren scheinen, ist eine andere Frage. Zeigen Sie zunächst die Registerkarte Leistung des Task-Managers im Abschnitt Speicher an.

Jamie Hanrahan
quelle
Ich habe keine Worte, um eine so perfekte Antwort zu beschreiben. Vielen Dank.
Vinicius Tavares
-2

Eine andere Möglichkeit ist, dass Sie Win10 32-Bit verwenden, nicht 64-Bit. Während Sie 16 GB RAM installiert haben, gibt es Einschränkungen für 32-Bit-Betriebssysteme, die eine praktische Verwendung von mehr als 4 Punkten ermöglichen. Außerdem legt das Betriebssystem pro Prozess fest, wie viel RAM angefordert werden kann, unabhängig vom physischen RAM. In diesem Fall können Sie nur auf ein 64-Bit-Betriebssystem wechseln oder weniger Anwendungen gleichzeitig ausführen.

Mekki MacAulay
quelle
2
Es wäre nicht möglich, Win10 32-Bit auszuführen und den Task-Manager wie im OQ insgesamt 16 GB anzeigen zu lassen. Übrigens sind die prozessbezogenen Grenzen des Betriebssystems auf den virtuellen Speicher beschränkt, nicht auf den Arbeitsspeicher. In Windows können Sie keine Aufrufe zur Zuweisung des Arbeitsspeichers per se tätigen . (Nun, AWE, aber das erfordert Administratorrechte und fast nichts verwendet diese außer einigen Systemprogrammen.) Sie weisen virtuellen Adressraum zu (etwa mit VirtualAlloc) und verwenden ihn dann. Wenn Sie es verwenden, weist das Betriebssystem Ihrem Prozess RAM zu ("Demand Paging"). Natürlich muss nicht alles auf einmal im RAM realisiert werden.
Jamie Hanrahan