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

Windows gebruikt te veel RAM, hoe diagnose te stellen van resource hog

Ik heb 16 GB RAM van het systeem. Bij het opstarten met geen toepassingen open behalve de taak-manager gebruikt Windows ongeveer 3gb RAM. Ik heb in het tabblad processen gekeken, maar er lijkt niets bijzonders te zijn. Hoe kan ik erachter komen waarom mijn Windows zoveel RAM gebruikt.

alle processen van alle gebruikers

  • *

Gelezen van de poolmon lijkt het erop dat mijn draadloze broadcom driver ongeveer 0.4GB RAM gebruikt. Zelfs als ik het verwijder zou het nog steeds 2.6GB gebruiken bij het opstarten, wat nog steeds te veel is.

  • *

Na het herinstalleren van de draadloze driver die verband houdt met het geheugenlek. Ik heb een nieuw screenshot en wil graag bevestigen dat het inderdaad een geheugenlek was.

Antwoorden (4)

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

Je hebt een geheugenlek veroorzaakt door een driver. Kijk naar de hoge waarde van nonpaged kernel geheugen. In uw geval is dit meer dan 3.7 GB. U kunt poolmon gebruiken om te zien welke driver het hoge gebruik veroorzaakt.

Installeer de Windows WDK , voer poolmon uit, sorteer via P na pooltype zodat non paged bovenaan staat en via B na bytes om de tag te zien die het meeste geheugen gebruikt. Start poolmon door naar de map te gaan waar WDK is geïnstalleerd, ga naar Tools (of C:Program Files (x86)\Windows Kits10Tools\x64) en klik op poolmon.exe.

Kijk nu welke pooltag het meeste geheugen gebruikt zoals hier getoond:

Open nu een cmd prompt en voer het findstr commando uit. Om dit te doen, open de cmd prompt en typ “cd C:Windows\System32\drivers”, zonder aanhalingstekens. Type dan “findstr /s __ .”, waar __ de tag is (de meest linkse naam in poolmon). Doe dit om te zien welk stuurprogramma deze tag gebruikt:

Ga nu naar de drivers map (C:\Windows32System32drivers) en klik met de rechtermuisknop op de driver in kwestie (intmsd.sys in het bovenstaande voorbeeld). Klik op Eigenschappen, ga naar het tabblad Details om de Productnaam te vinden. Zoek naar een update voor dat product.

Als de pooltag alleen Windows drivers laat zien of in de pooltag.txt staat ("C:\Program Files (x86)\Windows Kits.1\Debuggers\x64\triage\pooltag.txt")

moet je xperf gebruiken om te achterhalen wat de oorzaak van het gebruik is . Installeer de WPT van de Windows SDK , open een cmd.exe als admin en voer dit uit:

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

leg 30 -60s van de groei vast. Open de ETL met WPA.exe, voeg de Pool-grafieken toe aan het analysevenster.

Zet de pooltag kolom op de eerste plaats en voeg de stack kolom toe. Laad nu de symbolen in WPA.exe en vouw de stack uit van de tag die je in poolmon zag.

Zoek nu andere 3e partij drivers die je in de stack kunt zien. Hier wordt de Thre tag (Thread) gebruikt door AVKCl.exe van G-Data. Zoek naar driver/programma updates om dit te verhelpen.

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

Wel, eerst iets, voor ik een meer gedetailleerd antwoord geef. In uw eerste screenshot staat uw Non-Paged Pool (een soort kernel geheugengebruik) op 1.3GB. Dat lijkt me ongewoon hoog, vooral voor slechts 30 minuten na het opstarten. Ik denk dat ik zou kunnen zien dat NP Pool zo hoog wordt na een lange tijd van gebruik of met een programma dat lekt als een zeef. Daarentegen is mijn NP Pool meestal tussen de 100 en 200 megabytes, en mijn paged pool kan oplopen tot 400 of 500 (en dat is nadat ik mijn systeem wekenlang zonder reboot heb laten draaien).


Je kunt een paar extra kolommen inschakelen in Taakbeheer door rechts te klikken op de kolomkoppen, en te kiezen voor kolommen selecteren. Je zou Working Set (private), Working Set (shared), Commit, en NP Pool moeten toevoegen. Ik zou al uw processen van alle gebruikers scannen, en kijken of een van hen een NP Pool heeft van meer dan ongeveer 256KB. Als u er ziet, vooral als ze aanzienlijk hoger zijn, kan dat de bron van het probleem zijn, of op zijn minst een deel ervan.

Uw totale werkset, de hoeveelheid fysiek geheugen in gebruik door een proces, is de combinatie van de privé en gedeelde werksets (WS). Private is meestal groter voor de meeste processen, maar er kunnen er zijn die een grotere hoeveelheid shared WS gebruiken. De som van de twee zou normaal gesproken de totale WS moeten zijn. Commit is de hoeveelheid van uw werkset die is vastgelegd in de backing store (in de meeste gevallen, het Windows paginabestand). Backgrounded applicaties hebben vaak een grotere Commit dan WS, wat aangeeft dat een groot deel van hun paged pool uit het geheugen is geswapt en in je paging file is gezet (wat vrij normaal is voor desktop apps die geminimaliseerd zijn en een tijdje niet gebruikt zijn).

De Non-Paged Pool is geheugen dat niet kan, en nooit zal, worden uitgewisseld uit het fysieke geheugen … dat is effectief uw permanente minimale fysieke geheugengebruik. NP Pool geheugen bevat vaak programma code en kritische secties die in fysiek geheugen moeten zijn om zich correct of veilig te gedragen, speciale heaps, enz. Van de 60 processen, als ze allemaal 256KB NP Pool-geheugen hebben, dan zou uw absoluut minimum fysiek geheugengebruik ongeveer 15.360KB zijn. In de meeste gevallen hebben één of twee apps een NP Pool van 256KB, terwijl de meeste minder hebben, vaak aanzienlijk minder (of geen). Het is hoogst onwaarschijnlijk dat het systeem ooit alle processen in hun geheel zou pagineren, dus verwacht niet dat het geheugengebruik ooit zo laag zal worden.


Tenslotte, het punt van het hebben van meer geheugen is om te voorkomen dat je gegevens van en naar extended memory space (swap, page file) op een fysieke schijf moet pagineren. Paging is een proces waarbij blokken van toegewezen fysiek geheugen worden verplaatst, waarbij sommige naar schijf worden geduwd, en andere vanaf schijf in het fysieke geheugen worden gebracht. Paging is, om het simpel te houden, zeer ongewenst. Het is niet per se “slecht”, maar het kan de prestaties behoorlijk belemmeren als het te vaak voorkomt. Het uiteindelijke doel van het verhogen van het totale fysieke RAM-geheugen in een systeem is om meer processen in staat te stellen om meer van hun vastleggingen in het fysieke geheugen te bewaren (grotere werkset). Het verbruiken van geheugen is geen probleem, en wanneer meer uitvoerende processen meer geheugen gebruiken, zullen de totale systeemprestaties en de prestaties van actieve processen meestal hoger zijn, omdat de fysieke schijfactiviteit in verband met geheugentoegang (paginafouten, in het bijzonder) lager zal zijn.

Windows beheert het geheugen voor u, en automatisch pagina’s gegevens in en uit het geheugen naar en van de pagina (swap) bestand voor je. Als je een proces draait dat 9 GB geheugen nodig heeft en je systeem gebruikt al 4 GB (van de 12 GB), dan zal het systeem automatisch uitzoeken welke processen niet onmiddellijk toegang hoeven te hebben tot hun hele werkset, en zal het sommige of alle van hun paged pool naar swap pagineren om die extra 1 GB vrij te maken. Als uw grote proces uiteindelijk meer geheugen nodig heeft, zal windows de werkset van andere processen verder verkleinen totdat het genoeg vrije ruimte heeft om het nieuw aangevraagde blok toe te wijzen. Uw grote proces kan uiteindelijk al het beschikbare geheugen verbruiken, behalve NP Pool en misschien wat extra minimale overhead voor periodiek uitvoerende processen die Windows niet toestaan om meer van hun werkset vrij te maken (dat wil zeggen dat ze in afwachting zijn van pagina fouten die Windows anders uit het fysieke geheugen zou swappen, maar omdat ze worden opgevraagd, kunnen ze niet worden verplaatst).

Als een proces meer geheugen nodig heeft dan het mag hebben (32bit processen hebben meestal toegang tot 2Gb, en sommige iets minder dan 4Gb met verbeterde technieken, terwijl 64bit processen meestal toegang hebben tot ongeveer 48Gb geheugen, elk), dan zal windows soms proberen om zijn geheugen te virtualiseren met swap space. Als een 32bit app zijn maximum toegestane 2Gb aan ruimte wil gebruiken, maar er is slechts 1.2Gb beschikbaar, dan zal windows de volledige 2Gb reserveren in de page file, en de eigen data van het proces in en uit de page file verplaatsen als dat nodig is om het geheugengebruik van de app te ondersteunen. Het totale “geheugen”-gebruik kan in dit geval groter lijken dan het beschikbare fysieke geheugen, wanneer men uitgaat van Totaal Vastleggen. Total Commit zal gewoonlijk een maximum bereiken bij de totale grootte van het paginabestand, dat wanneer beheerd door het systeem, gewoonlijk 2-3x de hoeveelheid fysiek geheugen is. In uw geval zou Total Commit ongeveer 24Gb zijn, of 2x uw 12Gb fysieke geheugen (en dit wordt aangegeven in uw eerste schermafdruk, waar staat: Commit (GB) 3 / 23).


Nog een laatste punt. Je zei in je antwoord dat je 16Gb RAM had, terwijl Taakbeheer slechts 12Gb RAM ziet. Een van de twee dingen hier. Of je systeem heeft echt maar 12Gb RAM, of een van je sticks wordt niet goed geregistreerd. Als een stick ram is (ik neem aan 4x 4Gb sticks), dan kan het zijn dat hij slecht is, dat hij niet helemaal goed in je moederbord zit, of dat je moederbord een probleem heeft met de geheugendetectie.

Om te controleren of het dat laatste is, moet je eerst je moederbord BIOS updaten naar de laatste versie. Ik had een soortgelijk probleem… mijn zes Tripple-Channel DDR3 ram sticks (6x 2Gb) waren allemaal goed, gebaseerd op het individueel testen van elke stick… maar mijn moederbord besloot willekeurig om de zoveel tijd een of twee van de sticks niet mee te tellen, waardoor ik vaak maar 8Gb ram overhield. Een BIOS update loste het probleem op, en ik heb nu betrouwbare toegang tot alle 12Gb van mijn geheugen.

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

Hoe kom ik erachter waarom mijn Windows zoveel RAM gebruikt.

Het gebruikt zoveel RAM omdat het ontworpen is om dat te doen. Er zijn absoluut geen kosten verbonden aan het gebruik van RAM. In feite is gebruikt RAM beter dan vrij RAM omdat het besturingssysteem niets hoeft te doen om het te gebruiken. Gebruik van vrij RAM vereist dat het gebruikt wordt, wat moeite kost.

Als je denkt “Ik wil mijn RAM nu vrij hebben zodat ik het later kan gebruiken”, vergeet het maar. RAM hoeft nu niet vrij te zijn om later te gebruiken. Je kunt het nu gebruiken en later gebruiken. Er is geen ruilhandel hier – er is absoluut geen nadeel aan het gebruik van RAM.

RAM wordt gebruikt gehouden en direct overgeschakeld van het ene gebruik naar het andere, zonder dat je de moeite hoeft te doen om het vrij te maken, alleen maar om het weer gebruikt te moeten maken. Moderne besturingssystemen laten RAM alleen vrij als ze geen andere keus hebben.

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

Een reden die hierboven niet genoemd is, is Hyper-V.

Ik heb het kunnen identificeren met het uitstekende hulpprogramma RamMap :

De schermafbeelding is van erna. Voor de “Driver Locked” was het geheugen meer dan 6GB, meer dan 80% van het RAM in deze specifieke machine. Ik moest naar Hyper-V Manager gaan en “Dynamisch geheugen” uitschakelen. Vreemd genoeg bleef het “Driver Locked” geheugen laag, zelfs nadat ik het weer had ingeschakeld - ik kan alleen maar aannemen dat eerdere instanties het hebben verhoogd en dat Hyper-V niet automatisch het toegewezen geheugen vermindert: