Die Festschreibegebühr ist zu 100% voll, der physische Speicher jedoch nur zu 60%, wenn keine Auslagerungsdatei verwendet wird

25

Ich habe die Auslagerungsdatei in meinem System deaktiviert (Festplatte ist zu langsam, kann keine neue sofort kaufen, Auslagerungsdatei kann nicht auf eine andere Partition verschoben werden). Wenn ich in den Ressourcenmonitor schaue und speicherintensive Anwendungen verwende, zeigt das System, dass die Festschreibungsgebühr fast 100% voll ist. In der Tat, wenn ich weiterhin mehr Speicher benötige, stürzen Programme ab, da die Festschreibungsgebühr effektiv 100% erreicht.

In der Zwischenzeit gibt das System an, dass ich nur 50-60% des physischen Arbeitsspeichers verwende und ungefähr 1 GB Arbeitsspeicher zur Verfügung habe (frei + Standby).

Wenn die Übermittlungsgebühr der tatsächlich angeforderte Gesamtspeicher ist, warum gibt das System an, dass so viel Speicher verfügbar ist? Wird der physische Speicher von Windows nicht verwendet? Ist der Speichergraph falsch? Vermisse ich etwas?

Commit Charge Graph vs. Physical Memory Graph Taskmanager

Jason Oviedo
quelle
2
Eine weitere gute Antwort zu diesem Thema ist hier: brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7 .
21.05.15 Uhr,
@cnst Sehr guter Artikel. Es hat mir geholfen, dieses Problem viel besser zu verstehen. Warum postest du es nicht als Antwort?
Jason Oviedo
2
Bitte deaktivieren Sie Ihre Auslagerungsdatei nicht. Dies ist eine blöde Idee
Milney
@Milney Ich stimme zu, man sollte die Auslagerungsdatei normalerweise nicht deaktivieren. Im Moment der Frage ergab es für mich einen Sinn, dass die Festplatte einfach zu langsam war und so sehr mein System lahmlegte. Tatsächlich war es sehr nützlich, dass sich neben der Beantwortung dieser Frage die allgemeine Reaktionsfähigkeit des Systems um ein Vielfaches verbesserte.
Jason Oviedo
@JasonOviedo Das sollte nicht der Fall sein und zeigt an, dass etwas sehr falsch ist. Wenn Sie dem System mehr Optionen geben, sollte es NICHT langsamer werden. Das System muss die Auslagerungsdatei nicht verwenden, nur weil sie eine hat. (Das heißt, dies ist wahrscheinlich eine XY-Frage. Die richtige Frage ist genau, warum die Auslagerungsdatei Ihr System langsamer gemacht hat.)
David Schwartz

Antworten:

26

Das Commit-Limit zu überschreiten, solange noch viel RAM zur Verfügung steht, ist nicht ungewöhnlich. Weder das Festschreibungslimit noch die Festschreibungsgebühr hängen direkt mit dem freien oder verfügbaren RAM zusammen.

Das Festschreibungslimit = aktuelle Auslagerungsdateigröße + RAM-Größe.

Da Sie keine Auslagerungsdatei haben, ist das Festschreibungslimit kleiner als bei einer Auslagerungsdatei. Es spielt keine Rolle, wie viel RAM frei ist . Für das Festschreibungslimit ist nur die Größe des installierten Arbeitsspeichers von Bedeutung . Selbst wenn 90% Ihres Arbeitsspeichers frei oder verfügbar sind, kann Ihnen das Commit-Limit ausgehen.

Commit Charge ist eine Zählung des virtuellen Speichers, nicht des physischen. Angenommen, mein Programm fragt nach 2 GB Commit, greift dann aber nur auf 0,5 GB zu. Die verbleibenden 1,5 GB werden niemals als fehlerhaft eingestuft, werden niemals dem RAM zugewiesen, sodass die RAM-Nutzung nicht die 2 GB, sondern nur die 0,5 GB widerspiegelt.

Trotzdem wird "System-Commit" um 2 GB erhöht, da das System "Commit" ausgeführt hat, dass es einen Platz für meine 2 GB gibt, falls ich eigentlich alles brauche. Die Tatsache, dass ich bei jeder Ausführung des Programms nicht unbedingt versuchen werde, alles zu verwenden, hilft nicht weiter. Ich bat um 2 GB und die erfolgreiche Rückkehr von diesem Anruf sagt mir, dass das Betriebssystem "festgeschrieben" - dh versprochen - dass ich so viel virtuellen Adressraum nutzen kann. Das Betriebssystem kann dieses Versprechen nur geben, wenn es einen Ort gibt, an dem alles aufbewahrt werden kann.

Also: Legen Sie Ihre Auslagerungsdatei zurück, fügen Sie mehr RAM hinzu oder führen Sie weniger Dinge gleichzeitig aus. Oder irgendeine Kombination der drei. Dies sind Ihre einzigen Möglichkeiten, um die Fehler "Wenig Arbeitsspeicher" und "Nicht genügend Arbeitsspeicher" zu vermeiden.

Siehe auch meine Antworten hier (länger) und hier (viel länger).

Jamie Hanrahan
quelle
3
Insbesondere möchte Windows, bevor es Speicher zuweist, sicherstellen können, dass es diese Zuweisungen erfüllen kann, wenn sie verwendet werden. Selbst wenn die Zuordnungen nicht vollständig genutzt werden, verweigert Windows die Zuweisung weiterer Zuordnungen, wenn dies nicht garantiert werden kann. Eine Auslagerungsdatei bietet, unabhängig davon, ob sie verwendet wird oder nicht, zusätzlichen Sicherungsspeicher.
Bob
4

Wie der Speicherzuweisungstest in dem Artikel unter http://brandonlive.com/2010/02/21/measuring-memory-usage-in-windows-7/ zeigt, ist Windows ein Systemtyp, bei dem eine große Speicherzuweisung fehlschlagen würde Wenn eine solche Zuordnung zusammen mit allen vorherigen Zuordnungen (das Konzept, das Microsoft als "Festschreiben" bezeichnet) die Gesamtsumme des "Festschreibens" über die Summe des physischen Speichers und der Summe aller Auslagerungsdateien (Auslagerungsdateien) bringen würde.

Beachten Sie, dass eine Zuweisung für sich genommen weder physischen noch Swap- Speicher belegt , bevor ein Lese- oder Schreibvorgang innerhalb des virtuellen Adressraums des Prozesses für die oben genannte Zuweisung stattfindet. ZB eine 2 GB Zuteilung von selbst würde nur Auswirkungen auf die „Commit“ Zahlen (in Windows 7 talk), „Physical Memory“ in Ruhe zu lassen (bis Lese- / Schreib innerhalb der genannten Zuordnung geschieht).

In Bezug auf das Betriebssystemdesign besteht der alternative Ansatz darin, die Zuweisung einer beliebigen Größe zuzulassen (es sei denn, der verfügbare Speicher ist bereits vollständig erschöpft) und dann die Anwendungen beim Lesen / Schreiben fehlschlagen zu lassen. Weitere Informationen finden Sie unter /cs/42877/when-theres-no-memory-should-malloc-or-read-write-fail .

cnst
quelle
2
Ja. Das Argument für den Windows-Ansatz: Es ist zu erwarten, dass Programmierer den Status eines Mallocs (oder in Win32 VirtualAlloc) überprüfen. Sobald dieser Aufruf erfolgreich ist, kann das Programm darauf vertrauen, dass die zugewiesenen vas verwendbar sind, und dies wird so lange bleiben, bis ein entsprechendes freies oder virtuelles freies Exemplar vorliegt. Auf die andere Weise können normale Lese- und Schreibvorgänge im Speicher (dh das Dereferenzieren von Zeigern) Ausnahmen beim Speicherzugriff auslösen. Kein Programmierer erwartet jedoch, den Status nach jeder Zeiger-Dereferenzierung überprüfen zu müssen. Sie geben ohnehin keinen Status zurück, sodass dies mit einem Ausnahmebehandler erfolgen müsste. Hässlich.
Jamie Hanrahan
2

Der verfügbare Speicher entspricht nicht Ihrer Vorstellung. Es ist nicht ungenutzt, es ist wirklich ein Dateicache von kürzlich beendeten Prozessen oder gekürzten Prozessen, die gezwungen wurden, Speicher für andere Prozesse freizugeben. Sie könnten zu ihrem ursprünglichen Zweck zurückgerufen werden. Weitere Einzelheiten finden Sie unter.

http://support.microsoft.com/kb/312628

Da es keine Auslagerungsdatei gibt, ist dies sehr schlecht. Windows verschlechtert sich schlecht ohne ein. Denken Sie daran, dass auch ausführbare Dateien als Auslagerungsdateien verwendet werden, wenn keine Auslagerungsdatei vorhanden ist. Selbst wenn das Laufwerk langsam ist, ist es besser, eine Auslagerungsdatei zu haben, bis Sie bis zu 8 bis 16 GB Arbeitsspeicher haben. Einige Leute denken, dass sogar Windows 7 ohne ein dann laufen kann.

Ich gebe der alten Maschine regelmäßig Auftrieb, indem ich ein paar Dinge tue. Räumen Sie die Festplatte so weit wie möglich auf. Kopieren Sie alles, was Sie vorübergehend vom Laufwerk entfernen können, auf ein Backup. Entfernen Sie nicht benötigte Anwendungen. Apps entfernen kann neu installieren.

Wenn alles erledigt ist, defragmentieren Sie Ihre Festplatte. An diesem Punkt erstellen Sie Ihre Auslagerungsdatei neu. Es ist so nah wie möglich an der Vorderseite des Laufwerks. Erstellen Sie eine feste Größe für das 1,5-fache des Arbeitsspeichers. Das ist meine Regel, normalerweise habe ich Größen zwischen 1 und 3 Zeitgedächtnis gesehen. Dadurch wird die Geschwindigkeit gegenüber den üblichen Orten, an denen sie platziert werden würde, leicht erhöht.

Ich benutze den auslogischen Defrager, der kostenlos ist (Anzeigen für mehr Tools). Es gibt auch andere, die dies tun. Überprüfen Sie die Defragmentierer bei portableapps.com. Es optimiert die Festplatte, indem kürzlich aufgerufene Dateien für einen schnelleren Zugriff in der Nähe der Vorderseite des Laufwerks abgelegt werden. Es wird angezeigt, wo die Auslagerungsdatei abgelegt ist, damit Sie sehen können, ob Sie sie in die oberen 25% des Laufwerks verschoben haben.

Danach installieren Sie die Apps neu und kopieren Ihre Daten zurück.

Ich würde sagen, Sie bekommen 10 oder 20% mehr. Aber der Hauptwert ist, dass das Zögern nachlässt, um ein reibungsloseres Erlebnis zu ermöglichen.

Nelson Asinowski
quelle
3
Bei einigen Tests wurde mir klar, dass das Fehlen einer Auslagerungsdatei das System tatsächlich beschleunigt, wenn die Festplatte zu langsam ist. Ich kann bei einfachen Aufgaben wie dem Umschalten der App einen Unterschied von vielen Sekunden feststellen.
Jason Oviedo
@Mark Sie irren sich. Die überwiegende Mehrheit der Windows-Systeme wird mit einer Auslagerungsdatei ausgeführt (da Windows aus gutem Grund standardmäßig so ausgeführt wird), und fast alle von ihnen verwenden Datenträger mit ähnlicher Geschwindigkeit. Und fast keine von ihnen zeigt solche Probleme. Das Problem ist nicht "die Auslagerungsdatei", es ist, dass Sie nicht genug RAM haben. Beachten Sie, dass durch das Entfernen der Auslagerungsdatei kein Paging auf und von der Festplatte, sondern lediglich eine von normalerweise Hunderten von Dateien, die häufig mit Paging zu tun haben, eliminiert wird .
Jamie Hanrahan