2013-11-12 01:10:06 +0000 2013-11-12 01:10:06 +0000
75
75

Windows verwendet zu viel RAM, wie kann man den Ressourcenfresser diagnostizieren

Ich habe 16 GB System-RAM. Beim Start, wenn keine Anwendungen außer dem Task-Manager geöffnet sind, verbraucht Windows etwa 3 GB RAM. Ich habe in der Registerkarte “Prozesse” nachgesehen, aber es scheint nichts Ungewöhnliches zu sein. Wie kann ich herausfinden, warum mein Windows so viel RAM verbraucht?

Alle Prozesse von allen Benutzern


Aus dem Poolmon abzulesen scheint, dass mein Wireless-Broadcom-Treiber etwa 0,4 GB RAM verbraucht. Selbst wenn ich ihn entferne, würde er beim Start immer noch 2,6 GB verbrauchen, was immer noch zu viel ist.


Nach der Neuinstallation des drahtlosen Treibers, der mit dem Speicherleck verbunden ist. Ich habe einen neuen Screenshot und möchte bestätigen, dass es sich tatsächlich um ein Speicherleck handelt.

Antworten (4)

85
85
85
2013-11-12 04:54:18 +0000

Sie haben ein Speicherleck, das durch einen Treiber verursacht wird. Sehen Sie sich den hohen Wert des nicht ausgelagerten Kernelspeichers an. In Ihrem Fall liegt dieser über 3,7 GB. Sie können poolmon verwenden, um zu sehen, welcher Treiber den hohen Verbrauch verursacht.

Installieren Sie das Windows WDK , führen Sie poolmon aus, sortieren Sie es über P nach Pool-Typ, so dass non paged ganz oben steht, und über B nach Bytes, um das Tag zu sehen, das den meisten Speicher verbraucht. Starten Sie poolmon, indem Sie in den Ordner gehen, in dem das WDK installiert ist, gehen Sie zu Tools (oder C:\Program Files (x86)\Windows Kits\10\Tools\x64) und klicken Sie auf poolmon.exe.

Schauen Sie nun, welches Pooltag den meisten Speicher verbraucht, wie hier gezeigt:

Öffnen Sie nun eine cmd-Eingabeaufforderung und führen Sie den Befehl findstr aus. Öffnen Sie dazu die cmd-Eingabeaufforderung und geben Sie “cd C:\Windows\System32\drivers” ein, ohne Anführungszeichen. Geben Sie dann “findstr /s __ .” ein, wobei __ das Tag ist (der Name ganz links in poolmon). Machen Sie dies, um zu sehen, welcher Treiber dieses Tag verwendet:

Gehen Sie nun in den Treiberordner (C:\Windows\System32\drivers) und klicken Sie mit der rechten Maustaste auf den betreffenden Treiber (intmsd.sys im obigen Bildbeispiel). Klicken Sie auf Eigenschaften, gehen Sie auf die Registerkarte Details und suchen Sie den Produktnamen. Suchen Sie nach einem Update für dieses Produkt.

Wenn der Pooltag nur Windows-Treiber anzeigt oder in der pooltag.txt aufgelistet ist ("C:\Program Files (x86)\Windows Kits.1\Debuggers\x64\triage\pooltag.txt")

haben Sie mit xperf die Ursache für die Verwendung . Installieren Sie das WPT aus dem Windows SDK , öffnen Sie eine cmd.exe als Admin und führen Sie dies aus:

xperf -on PROC_THREAD+LOADER+POOL -stackwalk PoolAlloc+PoolFree+PoolAllocSession+PoolFreeSession -BufferSize 2048 -MaxFile 1024 -FileMode Circular && timeout -1 && xperf -d C:\pool.etl

30 -60s des Wachstums erfassen. Öffnen Sie die ETL mit WPA.exe, fügen Sie die Pool-Diagramme in den Analysebereich ein.

Setzen Sie die Pooltag-Spalte an die erste Stelle und fügen Sie die Stack-Spalte hinzu. Jetzt laden Sie die Symbole in WPA.exe und erweitern Sie den Stack des Tags, den Sie in poolmon gesehen haben.

Nun suchen Sie andere 3rd-Party-Treiber, die Sie im Stack sehen können. Hier wird das Tag Thre (Thread) von AVKCl.exe von G-Data verwendet. Suchen Sie nach Treiber-/Programm-Updates, um dies zu beheben.

15
15
15
2013-11-12 05:41:48 +0000

Nun, zunächst einmal, bevor ich auf eine detailliertere Antwort eingehe. In Ihrem ersten Bildschirmfoto liegt Ihr Non-Paged Pool (eine Art Kernel-Speicherverbrauch) bei 1,3 GB. Das erscheint mir ungewöhnlich hoch, besonders für nur 30 Minuten nach dem Booten. Ich denke, ich könnte mir vorstellen, dass der NP-Pool nach längerer Nutzung oder mit einem Programm, das wie ein Sieb ausläuft, so hoch wird. Im Gegensatz dazu ist mein NP-Pool normalerweise zwischen 100 und 200 Megabyte groß, und mein ausgelagerter Pool kann bis zu 400 oder 500 Megabyte groß sein (und das, nachdem mein System wochenlang ohne Neustart gelaufen ist).


Sie können einige zusätzliche Spalten im Task-Manager aktivieren, indem Sie mit der rechten Maustaste auf die Spaltenüberschriften klicken und “Spalten auswählen” wählen. Sie sollten Working Set (private), Working Set (shared), Commit und NP Pool hinzufügen. Ich würde alle Prozesse aller Benutzer durchsuchen und nachsehen, ob einer von ihnen einen NP-Pool von mehr als 256 KB hat. Wenn Sie welche sehen, insbesondere solche, die deutlich höher sind, könnte das die Ursache des Problems sein, oder zumindest ein Teil davon.

Ihr gesamter Arbeitsspeicher, die Menge des von einem Prozess verwendeten physischen Speichers, ist die Kombination aus dem privaten und dem gemeinsamen Arbeitsspeicher (WS). Bei den meisten Prozessen ist der private Speicher größer, es kann jedoch einige geben, die einen größeren Anteil des gemeinsamen Arbeitsspeichers verwenden. Die beiden sollten normalerweise die Summe des gesamten WS ergeben. Commit ist die Menge Ihres Working Sets, die in den Backing Store (in den meisten Fällen die Windows-Auslagerungsdatei) übertragen wurde. Bei Anwendungen im Hintergrund ist der Commit-Wert häufig größer als der WS-Wert, was darauf hindeutet, dass ein großer Teil des Auslagerungspools aus dem Speicher in die Auslagerungsdatei ausgelagert wurde (was bei Desktop-Anwendungen, die minimiert und eine Zeit lang nicht verwendet wurden, ziemlich normal ist).

Der Non-Paged Pool ist Speicher, der nicht aus dem physischen Speicher ausgelagert werden kann und auch nie ausgelagert werden wird… das ist effektiv Ihr permanenter minimaler physischer Speicherverbrauch. NP-Pool-Speicher enthält oft Programmcode und kritische Abschnitte, die sich im physischen Speicher befinden müssen, um sich korrekt oder sicher zu verhalten, spezielle Heaps usw. Wenn von 60 Prozessen alle 256 KB NP-Pool-Speicher haben, dann liegt Ihr absolutes Minimum an physischem Speicherverbrauch bei etwa 15.360 KB. In den meisten Fällen haben ein oder zwei Anwendungen einen NP-Pool von 256 KB, während die meisten weniger haben, oft deutlich weniger (oder gar keinen). Es ist höchst unwahrscheinlich, dass das System jemals die Gesamtheit aller arbeitenden Prozesse auslagern würde, also erwarten Sie nicht, dass die Speichernutzung jemals so niedrig wird.


Schließlich besteht der Sinn von mehr Speicher darin, das Auslagern von Daten in und aus dem erweiterten Speicherbereich (Swap, Auslagerungsdatei) auf einer physischen Festplatte zu vermeiden. Paging ist ein Prozess, bei dem Blöcke des zugewiesenen physischen Speichers verschoben werden, wobei einige auf die Festplatte verschoben werden und andere von der Festplatte in den physischen Speicher gebracht werden. Paging ist, um es einfach zu halten, höchst unerwünscht. Es ist nicht per se “schlecht”, aber es kann eine echte Leistungsbremse sein, wenn es zu häufig auftritt. Der eigentliche Sinn einer Vergrößerung des gesamten physikalischen Arbeitsspeichers in einem System besteht darin, mehr Prozessen die Möglichkeit zu geben, mehr von ihrem Commit im physikalischen Speicher zu halten (größeres Working Set). Wenn mehr ausgeführte Prozesse mehr Speicher verwenden, ist die Gesamtleistung des Systems und die Leistung der aktiven Prozesse in der Regel höher, da die physische Festplattenaktivität im Zusammenhang mit Speicherzugriffen (insbesondere Seitenfehlern) geringer ist.

Windows verwaltet den Speicher für Sie und paginiert automatisch Daten in und aus dem Speicher in die Auslagerungsdatei (Swap). Wenn Sie einen Prozess ausführen, der 9 GB Speicher benötigt, und Ihr System bereits 4 GB (von 12 GB) verwendet, findet das System automatisch heraus, welche Prozesse nicht sofortigen Zugriff auf ihren gesamten Arbeitsspeicher benötigen, und paginiert einen Teil oder den gesamten ausgelagerten Pool in die Auslagerungsdatei aus, um die zusätzlichen 1 GB freizugeben. Wenn Ihr großer Prozess schließlich mehr Speicher benötigt, wird Windows die Arbeitsmenge anderer Prozesse weiter reduzieren, bis es genug freien Platz hat, um den neu angeforderten Block zuzuweisen. Ihr großer Prozess könnte schließlich den gesamten verfügbaren Speicher verbrauchen, mit Ausnahme des NP-Pools und vielleicht etwas zusätzlichem minimalen Overhead für periodisch ausgeführte Prozesse, die es Windows nicht erlauben, mehr von ihrer Arbeitsmenge freizugeben (d. h. sie haben anstehende Fehlseiten, die Windows sonst aus dem physischen Speicher auslagern würde, aber weil sie angefordert werden, können sie nicht verschoben werden).

Wenn ein Prozess mehr Speicher benötigt, als er zugreifen darf (32bit-Prozesse können in der Regel auf 2Gb zugreifen, und einige etwas weniger als 4Gb mit verbesserten Techniken, während 64bit-Prozesse in der Regel auf etwa 48Gb Speicher zugreifen können), dann wird Windows manchmal versuchen, seinen Speicher mit Swap Space zu virtualisieren. Wenn eine 32-Bit-Applikation die maximal erlaubten 2 GB Speicher nutzen möchte, aber nur 1,2 GB verfügbar sind, reserviert Windows die vollen 2 GB in der Auslagerungsdatei und verschiebt die prozesseigenen Daten nach Bedarf in und aus der Auslagerungsdatei, um die Speichernutzung der App zu unterstützen. Die gesamte “Speichernutzung” kann in diesem Fall größer erscheinen als der verfügbare physische Speicher, wenn man nach Total Commit. Total Commit erreicht in der Regel den Maximalwert der Gesamtgröße der Auslagerungsdatei, die, wenn sie vom System verwaltet wird, in der Regel das 2-3-fache des physischen Speichers beträgt. In Ihrem Fall würde Total Commit etwa 24 GB betragen, also das Doppelte des physischen Speichers von 12 GB (dies wird in Ihrem ersten Bildschirmfoto angezeigt, wo es heißt: Commit (GB) 3 / 23).


Ein letzter Punkt. Sie sagten in Ihrer Antwort, dass Sie 16 GB RAM haben, während der Task-Manager nur 12 GB RAM anzeigt. Hier gibt es zwei Möglichkeiten. Entweder hat Ihr System wirklich nur 12 GB RAM, oder einer Ihrer Sticks wird nicht richtig registriert. Wenn ein Stick des Arbeitsspeichers (ich gehe von 4x 4Gb-Sticks aus) defekt ist, sitzt er vielleicht nicht ganz richtig in Ihrer Hauptplatine, oder Ihre Hauptplatine hat ein Problem mit der Speichererkennung.

Um zu überprüfen, ob es sich um letzteres handelt, sollten Sie zuerst Ihr Motherboard-BIOS auf die neueste Version aktualisieren. Ich hatte ein ähnliches Problem… meine sechs Tripple-Channel-DDR3-Sticks (6x 2Gb) waren alle in Ordnung, nachdem ich sie einzeln getestet hatte… aber mein Motherboard entschied zufällig, einen oder zwei von ihnen nicht zu zählen, was dazu führte, dass ich oft nur 8Gb Ram hatte. Ein BIOS-Update hat das Problem behoben, und ich habe jetzt zuverlässigen Zugriff auf alle 12 GB meines Speichers.

12
12
12
2013-11-12 01:35:00 +0000

Wie kann ich herausfinden, warum mein Windows so viel RAM verbraucht.

Es verbraucht so viel RAM, weil es dafür ausgelegt ist. Es gibt absolut keine Kosten, die mit der Verwendung von RAM verbunden sind. Tatsächlich ist genutzter RAM besser als freier RAM, weil das Betriebssystem nichts tun muss, um ihn zu nutzen. Die Verwendung von freiem RAM erfordert, dass es verwendet wird, was Aufwand bedeutet.

Wenn Sie denken “Ich möchte mein RAM jetzt frei haben, damit ich es später verwenden kann”, vergessen Sie es. RAM muss nicht jetzt frei sein, um später verwendet zu werden. Sie können es jetzt nutzen und es später nutzen. Hier gibt es keinen Kompromiss - es gibt absolut keinen Nachteil bei der Verwendung von RAM.

RAM wird benutzt gehalten und direkt von einer Verwendung zur anderen umgeschaltet, ohne dass man sich die Mühe machen muss, es frei zu machen, nur um es wieder benutzen zu müssen. Moderne Betriebssysteme lassen RAM nur dann frei, wenn sie keine andere Wahl haben.

2
2
2
2017-01-14 12:37:08 +0000

Ein oben nicht genannter Grund ist Hyper-V.

Ich konnte es mit dem hervorragenden Dienstprogramm RamMap identifizieren:

Der Screenshot ist von danach. Vor dem “Driver Locked” war der Speicher über 6GB groß, mehr als 80% des RAMs in diesem speziellen Rechner. Ich musste in den Hyper-V-Manager gehen und den “Dynamischen Speicher” deaktivieren. Seltsamerweise blieb der “Driver Locked”-Speicher auch nach dem erneuten Aktivieren niedrig - ich kann nur vermuten, dass frühere Instanzen ihn erhöht haben und dass Hyper-V den zugewiesenen Speicher nicht automatisch reduziert: