Windows, das zu viel RAM verwendet, wie man Ressourcenfresser diagnostiziert

73

Ich habe 16 GB System-RAM. Beim Start sind keine Anwendungen geöffnet, außer der Task-Manager, für den Windows etwa 3 GB RAM verwendet. Ich habe in der Registerkarte Prozesse nachgesehen, aber nichts scheint ungewöhnlich zu sein. Wie kann ich herausfinden, warum mein Windows so viel RAM verwendet?

Bildbeschreibung hier eingeben

alle Prozesse von allen Benutzern

Bildbeschreibung hier eingeben


Aus dem Poolmon geht hervor, dass mein Wireless Broadcom-Treiber etwa 0,4 GB RAM verbraucht. Selbst wenn ich es entferne, würde es beim Start immer noch 2,6 GB verwenden, was immer noch zu viel ist.

Bildbeschreibung hier eingeben


Nach der Neuinstallation des mit dem Speicherverlust verbundenen WLAN-Treibers. Ich habe einen neuen Screenshot und möchte bestätigen, dass es sich tatsächlich um einen Speicherverlust handelt.

Bildbeschreibung hier eingeben

Vader
quelle
3
Zunächst einmal haben Sie nur 12 GB. Entweder ist einer Ihrer vier 4 GB-Sticks defekt oder hat einen schlechten Sitz, oder Ihr Motherboard unterstützt keine 16 GB. Zweitens haben Sie versucht, Sicherheitsprogramme auszuführen, um nach Malware zu suchen? Security Essentials ist integriert. Aktualisieren Sie daher unbedingt die Definitionen und führen Sie einen Scan durch. Probieren Sie auch einige Anti-Rootkit-Programme aus, da sich Rootkits speziell verstecken (obwohl sie normalerweise versuchen, ein niedriges Profil zu bewahren, um unbemerkt zu bleiben, und ein paar Gigabyte RAM zu verbrauchen, sind kaum erforderlich).
Synetech
Vielleicht möchten Sie einen Blick auf die Leistung werfen -> Ressourcenmonitor
Journeyman Geek
Führen Sie den Befehl tasklist aus und leiten Sie die Ausgabe in eine Datei um, C: \ blah> tasklist> aa. Öffnen Sie dann die Datei aa. Für jeden Prozess werden Summen angezeigt, z. Prüfen Sie, ob die Summe mit der verwendeten Zahl übereinstimmt, die der Task-Manager in der Nähe des verwendeten Diagramms angibt. Für mich ist die Summe aus Jobliste 4 GB und Task-Manager sagt 4,5 GB. Ich kann die Diskrepanz, die ich habe, nicht erklären, aber sie ist nicht riesig. Es wäre interessant, wenn Sie eine große Diskrepanz haben.
Barlop
Ich habe keine Excel
Vader
1
Die NDxx-Tags sind ndis.sys. Ich würde BRCM als Broadcom bezeichnen. Das würde darauf hinweisen, dass Ihr Netzwerkadapter das Problem ist.
David Marshall

Antworten:

82

Sie haben einen Speicherverlust, der von einem Treiber verursacht wird. Sehen Sie sich den hohen Wert des nicht ausgelagerten Kernelspeichers an. In Ihrem Fall sind das über 3,7 GB. Mit poolmon können Sie feststellen , welcher Treiber die hohe Auslastung verursacht.

Installieren Sie das Windows-WDK , führen Sie poolmon aus und sortieren Sie es Pnach dem Pooltyp, sodass nicht ausgelagerte Daten oben und Bnach den Bytes angezeigt werden, um das Tag zu ermitteln, das den meisten Speicher belegt. Führen Sie poolmon aus, indem Sie in den Ordner wechseln, in dem WDK installiert ist, auf Tools (oder C: \ Programme (x86) \ Windows Kits \ 10 \ Tools \ x64) gehen und auf poolmon.exe klicken.

Schauen Sie sich nun an, welcher Pooltag den meisten Speicherplatz belegt:

Bildbeschreibung hier eingeben

Öffnen Sie nun eine cmd-Eingabeaufforderung und führen Sie den Befehl findstr aus. Öffnen Sie dazu die Eingabeaufforderung cmd und geben Sie "cd C: \ Windows \ System32 \ drivers" ohne Anführungszeichen ein. Geben Sie dann "findstr / s __ . " Ein, wobei __ das Tag ist (Name ganz links in Poolmon). Gehen Sie folgendermaßen vor, um festzustellen, welcher Treiber dieses Tag verwendet:

Bildbeschreibung hier eingeben

Wechseln Sie nun zum 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 und gehen Sie zur Registerkarte Details, um den Produktnamen zu finden. Suchen Sie nach einem Update für dieses Produkt.

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

Sie haben xperf verwendet, um zu verfolgen, was die Verwendung verursacht . Installieren Sie das WPT vom 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, und fügen Sie die Pool-Diagramme zum Analysebereich hinzu.

Platzieren Sie die Pooltag-Spalte an erster Stelle und fügen Sie die Stapelspalte hinzu. Jetzt die Symbole laden innen WPA.exe und den Stapel des Tags erweitern , die Sie in Poolmon sehen.

Bildbeschreibung hier eingeben

Suchen Sie nun andere Treiber von Drittanbietern, die Sie im Stapel sehen können. Hier wird das ThreTag (Thread) von AVKCl.exe von G-Data verwendet. Suchen Sie nach Treiber- / Programm-Updates, um das Problem zu beheben.

magicandre1981
quelle
1
oh, Entschuldigung. @Jebediah Kerman Haben Sie den Befehl findstr ausgeführt? Nach dem Namen könnte es sich um einen Netzwerkkartentreiber handeln. Wenn Sie weiterhin Probleme haben, führen Sie RAMMap aus, speichern Sie die Daten als RMP, komprimieren Sie die RMP-Datei und laden Sie die Zip-Datei hoch.
magicandre1981
das mag blöd klingen. Aber wie starte ich poolmon. Früher habe ich in der Lage sein für „Poolmon.exe“ zu suchen und zu starten
Vader
@JebediahKerman Ich denke, Sie haben dies bereits getan und die Tags gefunden. Ist das Bild von deinem Post nicht dein Poolmon?
magicandre1981
Das Bild ist meins. Aus irgendeinem Grund war der Suchindex unvollständig.
Vader
@JebediahKerman hast du geschaut, was diese NDFT ist? Sie können auch xperf verwenden, um die Poolnutzung zu verfolgen: channel9.msdn.com/Shows/Defrag-Tools/…
magicandre1981 13.11.13
15

Nun, als erstes, bevor ich auf eine detailliertere Antwort gehe. In Ihrem ersten Screenshot liegt Ihr nicht ausgelagerter Pool (eine Art von Kernel-Speicherbelegung) bei 1,3 GB. Das kommt mir ungewöhnlich hoch vor, vor allem 30 Minuten nach dem Booten. Ich schätze, ich konnte sehen, dass der NP-Pool nach längerem Gebrauch oder mit einem Programm, das wie ein Sieb leckte, so hoch wurde. Im Gegensatz dazu ist mein NP-Pool normalerweise zwischen 100 und 200 MB groß und mein ausgelagerter Pool kann bis zu 400 oder 500 MB groß sein (und das, nachdem mein System wochenlang ohne Neustart ausgeführt wurde).


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. Sie sollten hinzufügen Working Set (private), Working Set (shared), Commit, und NP Pool. Ich überprüfe alle Prozesse aller Benutzer und überprüfe, ob einer von ihnen einen NP-Pool von mehr als etwa 256 KB hat. Wenn Sie irgendwelche sehen, insbesondere solche, die wesentlich höher sind, könnte dies die Ursache des Problems sein oder zumindest einen Teil davon.

Ihr gesamter Arbeitssatz, die Menge an physischem Speicher, die von einem Prozess verwendet wird, ist die Kombination aus privatem und gemeinsamem Arbeitssatz (WS). Private ist normalerweise für die meisten Prozesse größer, es kann jedoch auch einige geben, die eine größere Menge gemeinsam genutzter WS verwenden. Die zwei sollten normalerweise zum gesamten WS summieren. Festschreiben ist der Betrag Ihres Arbeitssatzes, der für den Sicherungsspeicher festgeschrieben wurde (in den meisten Fällen die Windows-Auslagerungsdatei). Hintergrundanwendungen weisen häufig ein höheres Commit als WS auf, was darauf hinweist, dass ein Großteil ihres ausgelagerten Pools aus dem Arbeitsspeicher in Ihre Auslagerungsdatei ausgelagert wurde (was für Desktopanwendungen, die minimiert und für eine Weile nicht verwendet wurden, ziemlich normal ist).

Der nicht ausgelagerte Pool ist ein Speicher, der nicht aus dem physischen Speicher ausgelagert werden kann und wird. Dies ist effektiv Ihre permanente minimale physische Speicherauslastung. Der NP-Pool-Speicher enthält häufig Programmcode und wichtige Abschnitte, die sich im physischen Speicher befinden müssen, um korrekt oder sicher zu funktionieren, spezielle Heaps usw. Bei mehr als 60 Prozessen mit 256 KB NP-Pool-Speicher ist der physische Arbeitsspeicher auf ein Minimum beschränkt wäre rund 15.360 KB. In den meisten Fällen verfügen eine oder zwei Apps über einen 256-KB-NP-Pool, während die meisten weniger, häufig erheblich weniger (oder gar keinen) haben. Es ist sehr unwahrscheinlich, dass das System jemals die Gesamtheit aller funktionierenden Prozesse auslagert. Erwarten Sie also nicht, dass die Speichernutzung jemals so niedrig wird.


Schließlich geht es darum, mehr Speicher zu haben, um zu vermeiden, dass Daten auf und von einem erweiterten Speicherplatz (Auslagerungsspeicher, Auslagerungsdatei) auf einer physischen Festplatte ausgegeben werden müssen. Paging ist ein Prozess, bei dem Blöcke des zugewiesenen physischen Speichers verschoben, einige auf die Festplatte verschoben und andere von der Festplatte in den physischen Speicher verschoben werden. Paging ist, um es einfach zu halten, höchst unerwünscht. Es ist per se nicht "schlecht", aber es kann eine echte Beeinträchtigung der Leistung sein, wenn es zu häufig auftritt. Der ultimative Punkt für die Erhöhung des gesamten physischen Arbeitsspeichers in einem System besteht darin, mehr Prozessen zu ermöglichen, einen größeren Teil ihres Commits im physischen Speicher zu behalten (größere Arbeitsmenge). Der Speicherverbrauch ist kein Problem, und wenn mehr ausführende Prozesse mehr Speicher belegen, sind in der Regel die Gesamtsystemleistung und die Leistung aktiver Prozesse höher.

Windows verwaltet den Arbeitsspeicher für Sie und paginiert automatisch Daten in und aus dem Arbeitsspeicher in die Auslagerungsdatei für Sie. Wenn Sie einen Prozess ausführen, der 9 GB Arbeitsspeicher benötigt und Ihr System bereits 4 GB (von 12 GB) verwendet, ermittelt das System automatisch, welche Prozesse keinen sofortigen Zugriff auf ihren gesamten Arbeitssatz benötigen, und es werden einige oder alle Seiten angezeigt von ihrem ausgelagerten Pool zu tauschen, um diese zusätzlichen 1GB freizugeben. Wenn Ihr großer Prozess irgendwann mehr Speicher benötigt, wird die Anzahl der anderen Prozesse durch Windows weiter reduziert, bis genügend freier Speicherplatz für die Zuweisung des neu angeforderten Blocks vorhanden ist. Ihr großer Prozess könnte schließlich den gesamten verfügbaren Speicher mit Ausnahme des NP-Pools und möglicherweise einen zusätzlichen minimalen Overhead für die regelmäßige Ausführung von Prozessen verbrauchen, bei denen Windows nicht mehr Arbeitsspeicher freigibt (i. e. Sie weisen ausstehende Seitenfehler auf, die Windows andernfalls aus dem physischen Speicher auslagern würde. Sie können jedoch nicht verschoben werden, da sie angefordert werden.)

Wenn ein Prozess mehr Speicher benötigt, als er zugreifen darf (32-Bit-Prozesse können in der Regel auf 2 GB zugreifen, und einige weniger als 4 GB mit erweiterten Techniken, während 64-Bit-Prozesse in der Regel auf jeweils etwa 48 GB Speicher zugreifen können), versuchen es Windows manchmal seinen Speicher mit Swap Space zu virtualisieren. Wenn eine 32-Bit-App ihren maximal zulässigen Speicherplatz von 2 GB verwenden möchte, jedoch nur 1,2 GB verfügbar sind, reserviert Windows die gesamten 2 GB in der Auslagerungsdatei und verschiebt die prozesseigenen Daten nach Bedarf in die Auslagerungsdatei und aus dieser heraus unterstütze die Speichernutzung der App. In diesem Fall scheint die Gesamtbelegung des "Speichers" größer zu sein als der verfügbare physische Speicher, wenn Total Commit verwendet wird. Total Commit wird normalerweise die maximale Größe der gesamten Auslagerungsdatei erreichen, die, wenn sie vom System verwaltet wird, normalerweise das 2-3-fache des physischen Arbeitsspeichers beträgt. In deinem Fall,


Ein letzter Punkt. Sie sagten in Ihrer Antwort, dass Sie 16 GB RAM hatten, während der Task-Manager nur 12 GB RAM sieht. Eins von zwei Dingen hier. Entweder hat Ihr System wirklich nur 12 GB RAM, oder einer Ihrer Sticks registriert sich nicht richtig. Wenn ein RAM-Stick (ich gehe davon aus, dass es sich um 4 x 4-GB-Sticks handelt) schlecht ist, möglicherweise nicht richtig in Ihrem Motherboard sitzt oder ein Problem mit der Speichererkennung auf Ihrem Motherboard vorliegt.

Um zu überprüfen, ob es das letztere ist, sollten Sie zuerst Ihr Motherboard-BIOS auf die neueste Version aktualisieren. Ich hatte ein ähnliches Problem ... meine sechs Tripple-Channel-DDR3-RAM-Sticks (6 x 2 GB) waren alle gut, da sie einzeln getestet wurden ... aber mein Motherboard entschied sich nach dem Zufallsprinzip, nicht ein oder zwei von ihnen zu zählen, Ich habe oft nur 8 GB RAM übrig. Ein BIOS-Update hat das Problem behoben, und ich habe jetzt zuverlässigen Zugriff auf alle 12 GB meines Speichers.

jrista
quelle
Interessant ... und ich habe gerade bemerkt, dass sein nicht ausgelagerter Speicher sehr groß ist. Mein Speicher ist 539 MB, 139 MB nicht ausgelagert. Sie wissen eindeutig mehr als ich darüber Schreiben Sie "Total Commit wird in der Regel bei der Gesamtgröße der Auslagerungsdatei maximal ausgeführt". Mein RAM beträgt 12 GB. Ich setze meine Auslagerungsdatei auf mindestens 4000 MB (3,8 GB?) und mindestens 1,5 bis 2x Speicher. Mein maximales Commit beträgt 15 GB (Commit = 7) / 15 derzeit), meine Auslagerungsdatei ist ungefähr 4 GB oder wahrscheinlich ein bisschen weniger wie 3,8 GB. Max Commit ist eher wie Auslagerungsdateigröße + RAM-Größe. Wenn meine Auslagerungsdatei 12 GB war, war mein maximales Commit ungefähr 24 GB. Das maximale Commit für Auslagerungsdateien mit fast 3,8 GB oder 4 GB beträgt 15 GB
Barlop
@barlop: Na ja, du verstehst etwas falsch, was Commit ist. Aus technischer Sicht ist die Festschreibungsgebühr der gesamte "virtuell adressierbare Speicherbereich", einschließlich des von erweiterten Speichermanagern und einem großen Adressbewusstsein unterstützten Speicherbereichs. Das maximale Commit ist nicht Auslagerungsdatei + RAM, sondern wird als der gesamte vom System verwaltete virtuelle Adressraum bezeichnet. Die Auslagerungsdatei sollte im Allgemeinen mindestens die gesamte physische Speichergröße abdecken und diese zusätzlich über die gesamte physische Speichergröße hinaus erweitern. In Ihrem Fall hätte ich erwartet, dass das Commit mindestens 18 GB (1,5 x) oder 24 GB (2 x) beträgt, aber das ...
jrista
... wäre der Fall für eine systemverwaltete Auslagerungsdatei. Es hört sich so an, als hätten Sie die Einstellungen für die Auslagerungsdatei manuell angepasst. In diesem Fall müsste ich mehr über Ihre spezifische Konfiguration erfahren, um zu erfahren, warum Ihre aktuelle Übergabe 15 GB beträgt (da eine Auslagerungsdatei mit 3,8 / 4 GB eine Übergabe von 16 GB und nicht von 15 GB bedeutet) .) Es ist durchaus möglich, keine Auslagerungsdatei oder eine zu kleine Auslagerungsdatei manuell zu konfigurieren, was zu ungeraden Leistungsproblemen und Speicherzuordnungsproblemen führen kann. Die beste Empfehlung, es sei denn, Sie verfügen über eine hochspezifische Server- (dh Datenbank-) Konfiguration, besteht darin, Windows die Verwaltung seiner Auslagerungsdatei zu ermöglichen.
jrista
Eine letzte Anmerkung. Für eine maximale Leistung ist es am besten, Windows die maximale Größe der Auslagerungsdatei vorab zuweisen zu lassen. Dies geschieht normalerweise bei Serverkonfigurationen wie einer SQL Server-Datenbank, bei der Sie 64 GB oder mehr (normalerweise das Zweifache der physischen RAM-Größe, also möglicherweise sogar 128 GB oder 256 GB) einer Auslagerungsdatei zuweisen können, die für maximale Leistung gleichmäßig auf mehrere physische Datenträger verteilt ist . Verteilte Auslagerungsdateien ermöglichen, insbesondere wenn sie auf die maximale Größe vorab zugewiesen wurden, verschachtelte Lese- / Schreibvorgänge auf allen beteiligten Datenträgern, wodurch die Paging-Leistung über parallele E / A verbessert wird.
jrista
Als Beispiel für eine hohe Speicherauslastung weist mein System derzeit Folgendes auf: 7,5 / 12-GB-physische Speichernutzung; 14.7 / 23.3Gb Commit; 491 MB ausgelagerter Pool; 145 MB np Pool. Dies gilt für 146 Prozesse, maximaler ausgelagerter Pool 2276.000, maximaler NP-Pool 263.000. Die größte Commit-Größe beträgt 696.396 KB, und für denselben Prozess beträgt WS 714.256 KB (ein Opera-Tab-Prozess) ... Dutzende auf einmal öffnen, also Dutzende von zusätzlichen Prozessen.)
jrista
12

Wie kann ich herausfinden, warum mein Windows so viel RAM verwendet?

Es verbraucht so viel RAM, weil es dafür ausgelegt ist . Die Verwendung von RAM ist absolut kostenlos. In der Tat ist der verwendete Arbeitsspeicher besser als der freie Arbeitsspeicher, da das Betriebssystem nichts tun muss, um ihn zu verwenden. Die Verwendung von freiem RAM erfordert eine aufwändige Nutzung.

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

RAM wird verwendet und direkt von einer Verwendung zu einer anderen gewechselt, ohne dass es erst wieder verwendet werden muss. Moderne Betriebssysteme lassen RAM nur dann frei, wenn sie keine andere Wahl haben.

David Schwartz
quelle
12
Wenn mein Windows7-System beim Start 3 GB RAM verwendet, ohne dass Apps geöffnet sind, kann etwas falsch sein
Vader
5
@JebediahKerman Warum sagst du das? Ich bemühe mich, Ihnen zu erklären, warum dies nicht der Fall ist und warum Windows dafür entwickelt wurde. Hast du meine Erklärung nicht verstanden? Oder, wenn Sie damit nicht einverstanden sind, können Sie erklären, wo ich falsch liege?
David Schwartz
11
@ DavidSchwartz völlig falsche Antwort. Er hat ein Gedächtnisleck von einem Fahrer
magicandre1981
9
@DavidSchwartz: Das von Ihnen beschriebene Verhalten (RAM-Zuordnungen, die wiederverwendet werden können) muss zwangsläufig aus auslagerbarem Speicher bestehen. Die besorgniserregende Zahl ist 1,3 GB nicht ausgelagerter Speicher. Sie können das nicht einfach für andere Ressourcen freigeben. Wohin würden diese 1,3 GB gehen? "Nicht ausgelagert" bedeutet, dass der Besitzer sagt, "diese Bytes sind so wichtig, dass man sie nicht einmal auf die Festplatte schreiben oder gar wegwerfen kann".
MSalters
25
Warum ist diese "Antwort" so hoch gewählt? Es geht völlig daneben . Unabhängig von den verwendeten spezifischen Wörtern (die anfangs vollkommen klar waren) lautet die Frage nicht “Why is Windows using RAM?”, sondern lautet: “Why do the RAM usage numbers not add up; why is one part reporting a higher usage than another part?”Dieser Beitrag sollte bestenfalls ein Kommentar sein, da er die eigentliche Frage nicht anspricht oder gar versucht , sie zu beantworten. es mischt sich nur mit ein bisschen Rat ein, und ein schlechter Rat, da, wenn das OP es wie vorgeschlagen ignoriert hätte, der Speicherverlust nicht entdeckt würde.
Synetech
2

Ein oben nicht genannter Grund ist Hyper-V.

Ich konnte es mit dem hervorragenden Dienstprogramm RamMap identifizieren :

Bildbeschreibung hier eingeben

Der Screenshot stammt von after. Bevor der "Driver Locked" -Speicher mehr als 6 GB betrug, waren mehr als 80% des Arbeitsspeichers auf diesem Computer vorhanden. Ich musste in Hyper-V Manager gehen und "Dynamic Memory" deaktivieren. Seltsamerweise blieb der "Driver Locked" -Speicher auch nach der erneuten Aktivierung niedrig - ich kann nur davon ausgehen, dass er durch frühere Instanzen erhöht wurde und dass Hyper-V den zugewiesenen Speicher nicht automatisch reduziert:

Bildbeschreibung hier eingeben

Dagelf
quelle