- 11/16/2020
- 3 minuten om te lezen
-
- D
- v
Dit artikel biedt een work-around voor het probleem van hoog CPU-gebruik door het WmiPrvSE.exe proces met regelmatige tussenpozen.
Oorspronkelijke productversie: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – alle edities
Oorspronkelijk KB-nummer: 4483874
Symptomen
Wanneer u een Windows-gebaseerde computer gebruikt, merkt u dat het Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) gedurende enkele minuten om de 15 tot 20 minuten veel CPU-capaciteit gebruikt (bijna 100 procent).
Wanneer het probleem zich voordoet, gebruikt u Taakbeheer om de procesidentifier (PID) van het WmiPrvSE.exe proces te identificeren dat veel CPU gebruikt. Open vervolgens een verhoogde opdrachtprompt en voer de volgende opdracht uit:
tasklist /m wmiperfclass.dll
De lijst met WmiPrvSE.exe-processen die deze module geladen hebben, wordt weergegeven. Gewoonlijk wordt slechts één proces vermeld. Als u echter zowel 32-bits als 64-bits clients hebt, ziet u mogelijk twee processen. Dit is een voorbeeld van de uitvoer:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Als de PID van het vermelde proces overeenkomt met de PID die u in Taakbeheer hebt gevonden, is het waarschijnlijk dat u het probleem ondervindt dat in dit artikel wordt beschreven.
Oorzaak
Dit probleem kan worden veroorzaakt door een van de volgende factoren.
Een of meer processen gebruiken een groot aantal handvatten
Alle handvatten zijn opgeslagen in de kernelstructuur \BaseNamedObjects. De WMIPerfClass provider moet deze structuur scannen wanneer hij de prestatieklasse maakt die is gerelateerd aan de Job-objecten.
Als deze structuur opgeblazen is vanwege het grote aantal handles, zal de bewerking een hoog CPU-gebruik hebben en langer duren dan normaal.
U kunt een impact voor deze voorwaarde verwachten wanneer een proces meer dan ongeveer 30.000 handvatten gebruikt, of het totale aantal handvatten op het systeem meer dan 50.000 bedraagt.
Een update die in maart 2020 wordt uitgebracht voor ondersteunde versies van besturingssystemen, bevat enkele prestatieoptimalisaties en pakt enkele varianten van dit probleem aan. Raadpleeg de geschiedenis van Windows Updates voor meer informatie over de update die van toepassing is op uw Windows-versie.
Een of meer processen die op het systeem worden uitgevoerd, gebruiken veel geheugen
Dit is van invloed op het maken van de prestatieklassen van Processen, omdat het geheugengebied van elk lopend proces moet worden opgevraagd. Het geheugen dat door het proces wordt gebruikt kan gefragmenteerd zijn, en dit maakt de operatie meer resource-intensief. Dit gebeurt omdat WMIPerfClass ook “Costly” performance counters opvraagt.
U kunt controleren of Costly performance counters zijn ingeschakeld door het volgende PowerShell commando uit te voeren:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Als het commando resultaten retourneert, geeft dit aan welke Costly performance counters zijn ingeschakeld. Bijvoorbeeld:
Win32_PerfFormattedData_PerfProc_FullImage_Costly
Win32_PerfRawData_PerfProc_FullImage_Costly
Win32_PerfFormattedData_PerfProc_Image_Costly
Win32_PerfRawData_PerfProc_Image_Costly
Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly
Win32_PerfRawData_PerfProc_ThreadDetails_Costly
Workaround
Om het probleem op te lossen, moet u het proces identificeren dat een groot aantal handles of een grote hoeveelheid geheugen gebruikt.Het proces kan een geheugenlek of een handle-lek probleem hebben. Start het proces opnieuw op als workaround.
Als u Windows Server 2016 of een latere versie van Windows gebruikt, zijn de Kostbare prestatietellers standaard uitgeschakeld vanaf de volgende Cumulatieve Updates:
- Windows Server 2016 / Windows 10 versie 1607 (RS1)
October 18, 2018-KB4462928 (OS Build 14393.2580) - Windows 10 versie 1703 (RS2)
Juli 24, 2018-KB4338827 (OS Build 15063.1235) - Windows 10 versie 1709 (RS3)
Juli 24, 2018-KB4338817 (OS Build 16299.579) - Windows 10 versie 1803 (RS4)
juli 16, 2018-KB4345421 (OS Build 17134.167)
Note
Nadat de cumulatieve update is geïnstalleerd, moet u, als u de klassen nodig hebt die zijn gerelateerd aan de kostbare prestatietellers, de waarde Enable Costly Providers op 1 (DWORD) zetten onder de volgende registersubsleutel om ze weer beschikbaar te maken:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
De cumulatieve update heeft geen invloed op het gedrag wanneer een proces een groot aantal handvatten gebruikt.
Dit probleem treedt op wanneer een client de prestatieklassen opvraagt. Dit is meestal een bewakingstoepassing.
Als workaround kunt u ook de bewakingstoepassing uitschakelen om het aanmaken van de prestatieklassen te voorkomen.
Meer informatie
WMI biedt verschillende prestatieklassen. Voor meer informatie, zie Performance Counter Classes.
Deze klassen worden dynamisch aangemaakt op basis van de Performance Counters die beschikbaar zijn op het systeem. Alle klassen worden tegelijkertijd aangemaakt, niet alleen de klassen die worden opgevraagd.
WMIPerfClass is de module die het aanmaken van deze klassen afhandelt wanneer de WMI-client een van deze klassen opvraagt of de beschikbare klassen opsomt.
Deze prestatieklassen worden opgeslagen in een cache die na 15 tot 20 minuten ongeldig wordt gemaakt. Zodra de cache ongeldig is gemaakt, moeten de prestatieklassen opnieuw worden aangemaakt als een client ze opvraagt.
Het aanmaken van de prestatieklassen betekent dat de WMIPerfClass.dll module moet worden geladen in een WmiPrvSE.exe proces en dat de bijbehorende code moet worden uitgevoerd.