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:
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:
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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle