Ich habe dies auf vielen verschiedenen Windows-Rechnern bemerkt, und zwar zu vielen verschiedenen Gelegenheiten: Die vom Task-Manager oder vom Ressourcenmonitor gemeldete RAM-Auslastung scheint sich häufig zu einer Menge zu summieren, die erheblich unter der tatsächlich verwendeten Menge liegt.
Zum Beispiel habe ich oft auf meinem Laptop oder meinem Desktop 7 GB im Einsatz gesehen, und dennoch entspricht die Gesamtmenge des Arbeits-RAM-Satzes eher 3 GB. Ich kann nur nicht herausfinden, wo es verwendet wird!
Hier ist ein extremes Beispiel, das mir heute im Ressourcenmonitor auf einem Server aufgefallen ist:
Wenn Sie mit der rechten Maustaste auf das Bild klicken, eine neue Registerkarte öffnen und die Zahlen anzeigen, werden Sie feststellen, dass der Arbeitssatz (der keinen nicht physischen virtuellen Speicher enthält) sich auf etwa 1,7 GB beläuft. Ich erhalte ähnliche Zahlen, indem ich die RAM-Auslastung im Task-Manager addiere, wenn "Prozesse aller Benutzer anzeigen" aktiviert ist.
Hier ist ein Screenshot der Registerkarte "Leistung" des Task-Managers:
Dies besagt, dass 7,6 GB physischer Speicher verwendet werden.
Ich sehe das die ganze Zeit auf PCs, Laptops und jetzt auf Servern: Die von Systemtools gemeldete RAM-Auslastung macht nur etwa 1/4 der von mir beobachteten RAM-Auslastung aus. WTF ist los ???
Gibt es eine zufriedenstellende Erklärung, wo sich mein gesamter RAM befindet? Was verschlingt es und warum hinterlässt es keine Spuren?
BEARBEITEN: Hier ist ein Bild der grafischen RAM-Nutzung, wie der Benutzer gefragt hat:
BEARBEITEN 2: Als Antwort auf James 'Antwort sehen Sie hier ein Bild der nicht ausgelagerten Prozesse in poolmon.exe
, sortiert nach Größe:
Diese Ergebnisse verwirren mich. poolmon
Es wird korrekt angegeben, dass 6 GB nicht ausgelagerter Pool verwendet werden, aber alle nicht ausgelagerten Poolprozesse haben eine Größe von weniger als 8 MB.
Was könnte das heißen? Ist poolmon
andernfalls einige der Prozesse zu erkennen , die nicht ausgelagerten Pool mit?
quelle
Antworten:
Es tut mir leid, ich weiß, dass dies wie eine flippige Antwort klingt ... aber die Antwort auf die Frage in Ihrem Titel lautet "weil sie nicht sollen".
Oder, um es höflicher auszudrücken: Es wird viel RAM verwendet, das nicht in den privaten Arbeitssätzen von Prozessen enthalten ist. Einige davon befinden sich in den gemeinsam genutzten Arbeitssätzen von Prozessen. Aufgrund der gemeinsamen Nutzung können Sie jedoch keine verlässliche Vorstellung von der tatsächlichen Verwendung erhalten. Wenn Sie die Prozessnummern addieren, erhalten Sie ein viel zu großes Ergebnis.
Andere Dinge, die RAM belegen, wie der nicht ausgelagerte Pool, der residente Teil des ausgelagerten Pools und die residenten Teile anderer Kernel-Space-Anwendungen, werden in der Task-Manager-Anzeige "Prozesse" überhaupt nicht angezeigt.
In Bezug auf Ihr spezielles Problem:
Weitere Informationen finden Sie in der Task-Manager-Anzeige im Abschnitt "Kernelspeicher". Sie haben 6 GB "nicht ausgelagerten Speicher" (dh nicht ausgelagerten Pool). Dies ist Teil des Abschnitts "In Benutzung" in Ihrem zweiten Diagramm. Der nicht ausgelagerte Pool wird keinem Prozess in Rechnung gestellt, weshalb das Aufsummieren der Prozessnummern im Task-Manager nicht annähernd die Gesamtzahl der verwendeten Prozesse erreicht. Einige Treiber verwenden es höchstwahrscheinlich. Dies ist eine völlig überhöhte Menge; es sollte deutlich unter 1 GB liegen. Welcher Treiber auch immer für den übermäßigen Teil der nicht ausgelagerten Poolnutzung verantwortlich ist, ist zweifellos fehlerhaft.
RAMmap kann dies bestätigen (auf der Registerkarte "Use Counts" die Gesamtsumme für "Nonpaged Pool" anzeigen), aber es kann Ihnen nicht helfen, den Treiber zu finden, der es verursacht.
So finden Sie es: Besorgen Sie sich eine Kopie des Microsoft-Tools "poolmon". Es ist ein Zeichenmodus-Tool (Junge, ist es jemals), das mit dem Windows-Treiberkit vertrieben wird. Für Windows 7 ist das WDK ein kostenloser Download . Sie müssen das Ganze herunterladen (es ist eine ISO) und von dort installieren, aber Sie können auch nur die Tools installieren, wenn Sie dies möchten.
Suchen Sie in den WDK-Verzeichnissen nach poolmon - stellen Sie sicher, dass Sie das richtige 32- oder 64-Bit-Verzeichnis auswählen - und führen Sie es an einer Administrator-Eingabeaufforderung aus. Sie erhalten eine Anzeige wie folgt:
Drücken Sie jetzt die Taste "p" (nein, ich mache keine Witze. Keine Menüs hier!), Bis in der Spalte "Typ" nur noch "Nonp" angezeigt wird. Drücken Sie dann "b" (zweimal, falls erforderlich), um die Anzeige in absteigender Reihenfolge nach der Spalte "Bytes" zu sortieren (die hier bereits im Beispiel durchgeführt wurde).
Schauen Sie sich dann die Spalte "Tag" für die oberste Zeile an. In dem hier gezeigten (offensichtlich künstlichen) Fall handelt es sich um "Leak". (Auf diesem System wird ein Treiber ausgeführt, der absichtlich abgehört wurde, um dieses Problem zu verursachen. Es "leckt" ein nicht ausgelagerter Pool.)
Übrigens sind die hervorgehobenen Linien diejenigen, die sich seit der letzten Aktualisierung dieses archaischen Bildschirms geändert haben.
Suchen Sie nun unter c: \ Windows \ System32 \ Drivers nach einer .sys-Datei, die diese Zeichenfolge enthält. In diesem Fall würden Sie nach "Leak" wie folgt suchen:
Durchsuchen Sie dann das Web nach Verweisen auf diese Zeichenfolge und / oder diesen Treibernamen.
Es wäre auch hilfreich, hierher zurückzukehren und den vollständigen Namen, den Herstellernamen usw. aus der .sys-Datei anzugeben.
(Ich wette, dass das Tag, das Sie finden, ECMC ist, der Treiber intmsd.sys ist und mit einem Produkt namens ExpressCache oder IntelliMemory verknüpft ist. Ich würde dieses Produkt "deinstallieren". Es gibt ein Update, um das Problem zu beheben, aber auch Mit der festen Version konnte ich noch nie feststellen, dass die Leistung eines Systems durch dieses Produkt verbessert wurde.
Wenn dies nicht der Fall ist, verwenden Sie im nächsten Schritt das "Windows Performance Toolkit". Durchsuchen Sie dieses Forum nach dieser Zeichenfolge mit Antworten von magicandre1981, um eine Anleitung zu erhalten. Ignoriere Antworten, die xperf erwähnen - es ist eine ältere Version des Tools.
UPDATE: Laut den Kommentaren hat das OP das oben Gesagte getan und festgestellt, dass Poolmon zwar von einer riesigen Gesamtgröße des nicht ausgelagerten Pools berichtet hat, aber alle zugewiesenen Teile anscheinend winzig waren. Meine Vermutung (auch in den Kommentaren) ist, dass dies auf das zurückzuführen ist, was ich "aufgeblähten" Pool nennen werde: Pool wurde zugewiesen und dann freigegeben, aber aus irgendeinem Grund wurde die dem Pool zugewiesene RAM-Menge nicht verkleinert, um die "Freigabe" widerzuspiegeln. . Das Befolgen des in dieser Antwort von magicandre beschriebenen Verfahrens kann den Täter identifizieren.
quelle
poolmon
Wenn ich Zeit habe, werde ich heute nach einer undichten Stelle stöbern und versuchen, auch Ihre Antwort genauer zu lesen, um sicherzustellen, dass ich sie verstehe. Wollen Sie damit sagen, dass wahrscheinlich ein Speicherverlust vorliegt? Wenn dem so ist, ist das durchaus plausibel, da wir an Software arbeiten, von der bekannt ist, dass sie einige schreckliche Speicherlecks aufweist.poolmon.exe
auf dem fraglichen Server zu laufen , und bearbeitete meine Frage so, dass sie einen Screenshot enthielt.poolmon
Staaten Ich habe 6 GB nicht ausgelagerten Pool (wie Sie in meinem Task-Manager-Screenshot gezeigt haben), aber wenn ich nur "Nonp" -Prozesse betrachte und nach Größe sortiere, sind sie alle winzig (der größte ist 8 MB). Haben Sie eine Idee, warumpoolmon
der Großteil der nicht ausgelagerten Poolnutzung nicht erkannt wird?