Warum wird keine Auslagerungsdatei verwendet?

976
George21

Ich habe Probleme mit Windows Server 2008 R2 Enterprise. Der ausgelagerte Pool lädt den Speicher, lädt jedoch nicht die eigentliche Auslagerungsdatei (ich habe Platz auf dem Laufwerk dafür).

Eigentlich liegt das Problem in der übermäßigen Auslastung des Speichers und ich nahm an, dass dies das Problem ist.

Virtuelle Memery-Einstellung:

Bildschirm

Pagefile Usability: Bildschirmund die Speicherauslastung wächst langsam

Task-Manager-Leistung: Bildschirm

Task Manager-Prozesse: Bildschirm

RAM-Karte: Bildschirm

System Information: Bildschirm

3
Ihre Seitendatei wird jedoch verwendet. Beachten Sie, dass der aktuelle Commit bereits höher ist als der physische Arbeitsspeicher. // Erwarten Sie auch wirklich, dass der * Kernel * so viel Speicher verwendet? Daniel B vor 6 Jahren 1
[use poolmon] (https://superuser.com/a/674725/174557), um herauszufinden, warum die ausgelagerte Poolnutzung zu hoch ist und welcher Treiber so viel RAM verwendet. magicandre1981 vor 6 Jahren 1
https://i.stack.imgur.com/p8Ub6.png die obersten prozesse sind etwa 143 MB, suche ich in die richtige richtung? George21 vor 6 Jahren 0
sortiere die Daten zuerst mit ** B ** nach Bytes magicandre1981 vor 6 Jahren 0
Ich habe dies bereits https://i.stack.imgur.com/BpZSy.png gemacht George21 vor 6 Jahren 0
[Das CM31-Tag wird zum Laden von Registry-Hives verwendet] (https://superuser.com/a/1283948/174557), Mm = allgemeine Mm-Zuordnungen, virtuelle Vadl-Mm-Adressbeschreibungen, TSwd - rdpwd.sys - RDPWD - Hydra Winstation-Treiber . Ich gehe also davon aus, dass dies ein RemoteApp / Desktop-Server ist. Wie viele Benutzer sind miteinander verbunden? magicandre1981 vor 6 Jahren 0
Durchschnitt 22 Benutzer George21 vor 6 Jahren 0
wächst die Nutzung, je mehr Benutzer eine Verbindung herstellen? nimmt sie ab, wenn sie getrennt werden? magicandre1981 vor 6 Jahren 0
Nein, der Speicher wächst allmählich, auch wenn Benutzer getrennt werden George21 vor 6 Jahren 0

2 Antworten auf die Frage

1
Jamie Hanrahan

Erster Kommentar: Die Anzeige von "Kernel Memory - Paged", hier fast 22 GB, ist die virtuelle Größe des Paged Pools.

Die "Pools" in Windows sind Kernel-Space-Heap-Speicher. Sie werden von Kernel-Treibern und Windows-Kernelmoduscode auf ähnliche Weise verwendet wie Heap-Programme von Benutzermodusprogrammen. Sie befinden sich jedoch im Adressraum des Kernels, der für alle Prozesse gleich ist und natürlich nur im Kernelmodus verfügbar ist. Es gibt verschiedene Arten von Poolzuordnungen, die sich jedoch in "nicht ausgelagerte" und "ausgelagerte" Bereiche aufteilen. Der nicht ausgelagerte Pool befindet sich immer im RAM.

Der ausgelagerten Pool sollte wirklich den „seitenwechselbar“ Pool genannt werden, weil die „ausgelagerten“ genannt wird, bedeutet nicht, dass es sich aus dem RAM ausgelagert, oder dass es unbedingt sein. Dies bedeutet jedoch, dass es genauso ausgelastet ist wie die meisten Benutzermoduszuweisungen.

Und wie bei Benutzermoduszuordnungen können wir davon ausgehen, dass zu irgendeinem Zeitpunkt eine Teilmenge der virtuellen Größe des ausgelagerten Pools im RAM "resident" oder "valid" ist (Zugriff ist möglich, ohne dass ein Seitenfehler auftritt; dieser RAM wird als "in Verwendung" betrachtet.) ); Eine andere Teilmenge befindet sich in der Übergangsposition (in der Standby-Liste oder in der Liste der modifizierten Seiten und ist mit einem Soft-Page-Fehler abrufbar). Der Rest wird wirklich ausgelagert - in der Page-Datei, für den Zugriff ein Hard-Page-Fehler erforderlich ist.

Jetzt sind 22 GB viel ausgelagerter Pool. Ich meine, wirklich sehr viel. Eine solche Menge ist sehr ungewöhnlich. Ich vermute, Sie haben einen fehlerhaften Gerätetreiber, der einen ausgelagerten Speicher wie ein Sieb durchsickert.

Ich würde poolmon oder Windows Performance Toolkit verwenden, um herauszufinden, was den gesamten Pool zugewiesen hat. Hier bei SU gibt es viele Antworten, die zeigen, wie das im Detail geht.

In einem Kommentar zu Ihrer Frage knüpfte magicandre1981 an eine seiner Antworten an, in der die Vorgehensweise beschrieben wird.

Darüber hinaus scheint es, dass etwas das Schreiben in die Auslagerungsdatei verhindert.

Ihre Bildschirmobergrenze von RAMmap (und danke dafür, dass Sie das aufgenommen haben) zeigt, dass der 19 GB ausgelagerte Pool, der RAM belegt (dies ist kleiner als die virtuelle Größe), etwa 620 MB "aktiv" ist. Das bedeutet, dass viel RAM als "in Verwendung" betrachtet wird. Das ist der Teil, auf den ohne Seitenfehler zugegriffen werden kann. Für die PTEs, die diese virtuellen Seiten beschreiben, sind "gültige" Bits gesetzt.

Fast die gleiche Menge (etwa 680 MB) steht auf der Standby-Seitenliste.

Und hier ist der Indikator für ein zweites Problem: Über 17 GB stehen auf der Liste "Modifiziert".

In der Seitenliste "Modifiziert" werden Seiten eingefügt, wenn sie aus einem Arbeitssatz verschoben werden, nachdem der Inhalt seit dem Einfügen geändert wurde. (Wenn der Inhalt einer Seite nicht geändert wurde, seit sie eingeblendet wurde, dann, wann? Von seinem Arbeitssatz verloren, wird es einfach in die Standby-Seitenliste aufgenommen, ist Teil des "verfügbaren" RAM und kann sofort für andere Zwecke verwendet werden.) Solche Seiten können nicht einfach für einen anderen Prozess freigegeben werden. ihr Inhalt muss gespeichert werden. Für von der Auslagerungsdatei gesicherte Seiten bedeutet "gespeichert" "in die Auslagerungsdatei geschrieben".

Nachdem eine modifizierte Seite auf die Festplatte geschrieben wurde, wird sie in die Standby-Liste verschoben, von der aus sie erneut verwendet werden kann. Die Standby-Liste wird als Teil des "verfügbaren" RAM gezählt. (Er ist auch Teil des "Cached" -Zählers in dieser Anzeige des Task-Managers.)

Sie haben also über 17 GB RAM in der modifizierten Seitenliste - RAM, das Ihr System in Ihre Auslagerungsdatei schreiben möchte.

Das ist absolut übertrieben.

Die meisten Systeme haben nur einige Prozent ihres Arbeitsspeichers auf der modifizierten Liste. Es gibt Threads im Systemprozess, die dafür sorgen sollen, dass geänderte Seiten jedes Mal auf die Festplatte geschrieben werden, wenn die geänderte Liste einen kleinen Schwellenwert überschreitet. Sie machen den Job nicht.

Ich stelle fest, dass Ihre derzeitige Auslagerungsdatei etwa 5 GB groß ist und pro WMI-Ausgabe voll ist. (So Ihr System ist auf die Auslagerungsdatei zu schreiben.) Aber es scheint, dass Auslagerungsdatei Expansion ist, aus irgendeinem Grunde nicht passiert.

Hmm - Sie haben die Größe der Auslagerungsdatei auf maximal 20 GB begrenzt. Selbst wenn sie auf diese Größe erweitert wurde, reicht dies nicht aus, um den aktuellen Inhalt plus 17 GB mehr zu halten. Wenn Sie die maximal mögliche PF-Größe größer machen (Windows schlägt fast 40 GB vor), wären die Dinge vielleicht ungelöst.

Aber ich bezweifle es. Ich sehe keinen Grund dafür, dass Windows die Auslagerungsdatei nicht bis zum Limit erweitert. Es würde zwar nicht alle modifizierten Seiten enthalten, aber die meisten von ihnen zu halten ist viel besser, als so viele von ihnen im RAM zu behalten.

Mittlerweile sind diese 17+ GB für andere Zwecke nicht verfügbar. Aus diesem Grund ist Ihr "Verfügbarer" Arbeitsspeicher so niedrig.

Wir haben Fehler in der Größe der Auslagerungsdatei festgestellt, die behoben wurden durch:

  • Stellen Sie die Auslagerungsdatei auf deaktiviert
  • Herunterfahren und neu starten
  • Stellen Sie sicher, dass die alte Auslagerungsdatei nicht mehr vorhanden ist. Wenn nicht, löschen Sie es.
  • Legen Sie die Größe der Auslagerungsdatei auf einen angemessenen Wert fest
  • ggf. herunterfahren und neu starten

Sie könnten das versuchen.

Ihr eigentliches Problem ist jedoch, dass Sie eigentlich keinen 20-GB-Paged-Pool benötigen sollten. Finden und beheben Sie das.

Danach sollten Sie die Auslastung Ihrer Auslagerungsdatei erneut prüfen und die Anfangsgröße auf mindestens das Doppelte der Routineverwendung einstellen. Es gibt keinen guten Grund, die Anfangsgröße kleiner einzustellen, als Ihr System routinemäßig benötigt. (Ich möchte, dass die Auslagerungsdatei nicht mehr als 25% verwendet wird, aus Gründen, die mit den Speicherzuordnungsalgorithmen zusammenhängen - sie arbeiten viel besser mit viel freiem Speicherplatz, um darin zu arbeiten.)

Übrigens werden sowohl die "Standby" - als auch die "Modified" -Seiten (meiner Meinung nach etwas irreführend) als Teil von "Cached" auf diesem Task-Manager-Bildschirm gezählt. Die Tatsache, dass Sie 17,4 GB "Modified" haben, erklärt diese riesige "Cached" -Nummer. Die riesige "Cached" -Nummer ist an und für sich kein Problem; Es ist eines der Symptome.

Kommentare sind nicht für eine erweiterte Diskussion vorgesehen. Diese Konversation wurde zum Chat verschoben (https://chat.stackexchange.com/rooms/74714/discussion-on-answer-by-jamie-hanrahan-why-isnt-pagefile-being-used). DavidPostill vor 6 Jahren 0
0
Sreejith. D. Menon

Paged Pool ist eine Kategorisierung für Kernelmoduscode. Für den Kernelmoduscode wird ein seiten- oder nicht-seitenorientierter Pool für Vorgänge und bestimmte Betriebsarten eines bestimmten Typs verwendet. Dies kann durch die Auslagerungsdatei unterstützt werden oder nicht. Es ist Sache des Betriebssystems, Paging zuzuweisen und zu verwenden. In der Tat kostet das Paging Ihre E / A, daher würde das Betriebssystem es vorziehen, so viel wie möglich in Physical zu behalten. 24 GB physisch für ein x64-Bit-Betriebssystem ist die Konfiguration, wie ich sie sehe. Das Betriebssystem kann die meisten Operationen im Hauptspeicher sehr gut verwalten.

https://technet.microsoft.com/de-de/library/ff382715.aspx

Die obige Referenz hilft dabei, die zwischengespeicherte Größe zu verstehen.

Ich denke nicht, dass dies ein Problem ist. Ich kann wahrscheinlich auch nicht weiter erläutern, was die offensichtlichen Metriken in den Tools, die Sie verwendet haben, zeigen.

Bearbeiten: - Nach der Analyse "Siehe ~ 40 Kommentare" wird festgestellt, dass der Täter ein Fremdfahrer ist. Analyse mit Hilfe der erstklassigen Analyse / Hinweis, dass dies tatsächlich ein Problem ist (Kredit: Jamie Hanrahan) und Paged Pool-Analyse (Kredit: Magicandre). Weitere Analyse erforderlich, um die eigentliche Frage zu beantworten.

* Dies kann durch die Auslagerungsdatei unterstützt werden oder nicht. * Alle Speicherkategorien außer "Nicht-Auslagerungspool" werden durch die Auslagerungsdatei gesichert. Beachten Sie, dass die Unterstützung durch die PF sich von der eigentlichen * Beschreibung * unterscheidet. In der PF unterstützt zu sein, bedeutet lediglich, dass das Betriebssystem Platz in der PF reserviert hat. Twisty Impersonator vor 6 Jahren 0
Ich meinte, dass es immer noch eine Chance geben wird, die Seitendatei zu verwenden. Ich habe das klar gesagt, als ich sagte, es ist Sache des Betriebssystems, es zu benutzen! Als ich sagte, dass es möglicherweise nicht von PF unterstützt wird, meinte ich, dass es möglicherweise nicht häufig ausgetauscht wird. Ich habe verstanden, dass "Backed" sorgfältig verwendet werden sollte und danke, dass es semantisch richtig gemacht wurde Twisty! Sreejith. D. Menon vor 6 Jahren 0
Um dies hinzuzufügen - für die Speicherzuordnung ist dies eine Option, die durch eine Auslagerungsdatei oder durch eine tatsächliche Datei gesichert wird, die dem Dateisystemcache zugeordnet wird. In diesem Fall wird es also nicht durch eine Auslagerungsdatei gesichert, sondern durch die tatsächliche Datei, auf deren Grundlage das Abschnittsobjekt erstellt wird. Vielleicht möchten Sie diesen Aspekt auch zu Twisty untersuchen. Ich weiß, über Speicherverwaltung zu sprechen ist nicht so einfach :) Sreejith. D. Menon vor 6 Jahren 0
_ "Alle Speicherkategorien außer" Nicht-Auslagerungs-Pool "werden durch die Auslagerungsdatei gesichert." _ Sorry, aber das stimmt nicht. Wie SDM sagte, werden durch zugeordnete Dateien gesicherte Speicherzuweisungen von den Dateien selbst gesichert. Dies kann in der Tat die Auslagerungsdatei sein (rufen Sie CreateFileMapping mit NULL für das Dateihandle auf, und Sie erhalten einen von der Seitendatei unterstützten Abschnitt), aber viel häufiger handelt es sich um eine bestimmte Datei. Der gesamte ausführbare Code (exe, dlls usw.) wird auf diese Weise behandelt, sodass Sie sehen können, dass hier einiges passiert. Sehen Sie sich den Bereich "DLL" von Process Explorer an, um die Dateien anzuzeigen, denen ein Prozess zugeordnet ist. Jamie Hanrahan vor 6 Jahren 0
Jamie Hanrahan wie in Jamie Hanrahan von Windows Internals: O. Wenn ja, dann ist es jetzt etwas Zeit für mich und es ist schön, dich in der Nähe zu sehen :) Sreejith. D. Menon vor 6 Jahren 0