Hoe los ik een hoog geheugengebruik in de niet-gepaginadeerde geheugenpool op in Windows?

Het aanpakken van geheugenlekken op Windows-machines, vooral wanneer de niet-gepaginadeerde pool oncontroleerbaar begint te groeien, is behoorlijk vervelend. Dit is meestal te zien in het tabblad Prestaties van Taakbeheer, waar de niet-gepaginadeerde pool kan oplopen tot een paar gigabytes – ver boven de gebruikelijke 200-400 MB. Dit kan leiden tot allerlei problemen, van traagheid tot crashes. Meestal wordt het veroorzaakt door slecht functionerende of conflicterende stuurprogramma’s, vaak netwerkstuurprogramma’s. Een herstart lost het probleem tijdelijk op, maar je wilt natuurlijk een permanente oplossing, vooral op een server die 24/7 draait. Hieronder een overzicht van wat in de praktijk heeft gewerkt, met hier en daar wat technische details.

Hoe los je geheugenlekken in niet-gepaginadeerde geheugenpools op in Windows?

Schakel het stuurprogramma voor het bewaken van netwerkdatagebruik uit.

Vaak is de boosdoener het stuurprogramma voor de netwerkactiviteitsmonitor, genaamd NDU ( %WinDir%\system32\drivers\Ndu.sys).Netwerkkaarten van Killer en MSI staan ​​erom bekend dat ze conflicteren met dit stuurprogramma. Als u merkt dat de niet-gepaginadeerde geheugenpool steeds groter wordt bij het overdragen van grote bestanden, of als de gebeurtenislogboeken steeds foutmeldingen geven zoals ” De server kon geen geheugen toewijzen uit de niet-gepaginadeerde geheugenpool van het systeem”, dan kan het uitschakelen van dit stuurprogramma helpen. Het is een beetje vreemd, maar het uitschakelen van de NDU-service of de bijbehorende registervermelding kan de situatie stabiliseren.

  • Stop het stuurprogramma via de opdrachtprompt of PowerShell:
sc config NDU start= disabled
  • Of, als u de voorkeur geeft aan de registermethode, opent u regedit.exe en navigeert u naar:
  • HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Ndu\
  • Wijzig de Start- waarde naar 4 (waardoor het stuurprogramma bij de volgende opstart wordt uitgeschakeld).
  • Hierna is een herstart noodzakelijk. Soms werkt dit bij bepaalde configuraties niet meteen, dus als het probleem zich blijft voordoen, probeer het dan opnieuw of controleer op conflicterende netwerkstuurprogramma’s (zoals Killer of MSI).Op sommige machines kan het uitschakelen van deze service in eerste instantie kleine problemen veroorzaken, maar over het algemeen vermindert het het datalek – het is een afweging. Houd er rekening mee dat dit geen wondermiddel is, maar het is het proberen waard.

    Gebruik PoolMon om de driver te vinden die het lek veroorzaakt.

    Als het probleem aanhoudt en je de oorzaak wilt achterhalen, is PoolMon (Pool Monitor) je beste vriend – misschien wat technisch, maar wel effectief. Je moet het downloaden uit de Windows Driver Kit (WDK). Na de installatie start je Poolmon.exe, bij voorkeur als beheerder.

    Wanneer het venster opent, drukt u op P om de pooltags te zien die het vaakst niet-gepaginadeerd geheugen gebruiken. Druk vervolgens op B om te sorteren op bytes. Dit helpt u te zien welke stuurprogramma’s veel geheugen in beslag nemen. Zoek naar tags zoals Nr22, ConT of smNp. De volgende stap is om te achterhalen aan welke stuurprogramma’s of hardware deze tags zijn gekoppeld. Gebruik hiervoor tools zoals strings.exe van Sysinternals of de opdracht findstrin de opdrachtprompt of PowerShell.

    findstr /m /l /s Nr22 %SystemRoot%\System32\drivers\*.sys

    Als je de voorkeur geeft aan PowerShell:

    Set-Location "C:\Windows\System32\drivers" Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique Select-String -Path *.sys -Pattern "ConT" -CaseSensitive | Select-Object FileName -Unique

    Zodra je verdachte stuurprogramma’s hebt geïdentificeerd (bijvoorbeeld rdyboost.sys of rsmnp.sys ), controleer dan hun gegevens met SigCheck van Sysinternals:

    sigcheck C:\Windows\System32\drivers\rdyboost.sys

    Dit geeft je informatie over de driverversie, beschrijving, enzovoort. Mogelijk moet je die drivers bijwerken, terugzetten naar een eerdere versie of uitschakelen als je vermoedt dat ze het lek veroorzaken. Als je een BSOD ziet die verband houdt met geheugenuitputting, kun je ook een geheugendump analyseren met WinDbg, door commando’s zoals !vmof uit te voeren !poolused 2om de tag van de defecte driver te vinden.

    Houd stuurprogramma’s up-to-date of zet ze terug naar een eerdere versie.

    Op de meeste moderne systemen zijn verouderde of gebrekkige netwerkstuurprogramma’s vaak de boosdoener. Ga naar de website van de fabrikant (Intel, Realtek, Killer, MSI, enz.) en download de nieuwste stuurprogramma’s. Soms gaat Windows Update de mist in, dus handmatig bijwerken kan helpen. Als het probleem is ontstaan ​​na een stuurprogramma-update, overweeg dan om terug te gaan naar een eerdere versie. Dat herstelt vaak de stabiliteit.

    Schakel Hyper-V uit als het niet nodig is.

    Hyper-V, het virtualisatieplatform, kan soms geheugen lekken naar de niet-gepaginadeerde pool, vooral als het is ingeschakeld maar niet wordt gebruikt. Als Hyper-V is geïnstalleerd maar niet wordt gebruikt, kan het uitschakelen ervan resources vrijmaken.

    • In PowerShell, voor Windows Server:
    Remove-WindowsFeature -Name Hyper-V
  • Gebruik op Windows 10 het volgende:
  • Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

    Als deze opdrachten geen resultaat opleveren of als Hyper-V niet is geïnstalleerd, controleer dan of er een proces of virtuele machine actief is die geheugenlekken kan veroorzaken. Voeg in Taakbeheer de kolom NP Pool toe (door met de rechtermuisknop op de kolomkoppen te klikken en ‘Kolommen selecteren’ te kiezen ) en let op processen met een zeer hoog niet-gepaginadeerd geheugengebruik.

    Dit is een vrij breed gebied; elke configuratie reageert anders. Maar deze stappen hebben geholpen om enkele veelvoorkomende oorzaken op te sporen, met name op servers of bij sterk aangepaste Windows-installaties.