- 11/16/2020
- 3 minutter at læse
-
- D
- v
Denne artikel indeholder en løsning på problemet med højt CPU-forbrug af WmiPrvSE.exe-processen med jævne mellemrum.
Original product version: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 R2, Window 10 – alle udgaver
Original KB-nummer: 4483874
Symptomer
Når du bruger en Windows-baseret computer, bemærker du, at WMI (Windows Management Instrumentation) Provider Host (WMI) (WmiPrvSE.exe) bruger høj CPU-kapacitet (tæt på 100 procent) i flere minutter hvert 15. til 20. minut.
Når problemet opstår, skal du bruge Task Manager til at identificere procesidentifikatoren (PID) for den WmiPrvSE.exe-proces, der bruger høj CPU. Åbn derefter en forhøjet kommandoprompt, og kør følgende kommando:
tasklist /m wmiperfclass.dll
Listen over WmiPrvvSE.exe-processer, som har dette modul indlæst, vises. Normalt er der kun én proces på listen. Hvis du har både 32-bit og 64-bit klienter, kan du dog se to processer. Dette er et eksempel på output:
Image Name PID Modules
========== ======== ==========================
WmiPrvvSE.exe 2140 WmiPerfClass.dll
Hvis PID’et på den anførte proces stemmer overens med den, du fandt i Task Manager, er det sandsynligt, at du støder på det problem, der er beskrevet i denne artikel.
Årsag
Dette problem kan skyldes en af følgende faktorer:
En eller flere processer bruger et stort antal håndtag
Alle håndtag er gemt i kernestrukturen \BaseNamedObjects. WMIPerfClass-leverandøren skal scanne denne struktur, når den opretter den ydelsesklasse, der er relateret til Job-objekterne.
Hvis denne struktur er oppustet på grund af det store antal håndtag, vil operationen have et højt CPU-forbrug og tage længere tid end normalt.
Du kan forvente en indvirkning for denne tilstand, når en proces bruger mere end ca. 30.000 håndtag, eller det samlede antal håndtag på systemet overstiger 50.000.
En opdatering, der frigives i marts 2020 til understøttede operativsystemversioner, indeholder en vis optimering af ydeevnen og adresserer nogle varianter af dette problem. Se Windows-opdateringshistorikken for at få flere oplysninger om den opdatering, der gælder for din Windows-version.
En eller flere processer, der kører på systemet, bruger meget hukommelse
Dette påvirker oprettelsen af Process-ydelsesklasserne, fordi hukommelsesområdet for hver enkelt kørende proces skal forespørges. Den hukommelse, der bruges af processen, kan være fragmenteret, og det gør operationen mere ressourcekrævende. Dette sker, fordi WMIPerfClass også forespørger på “Costly”-ydelsestællere.
Du kan kontrollere, om Costly-ydelsestællere er aktiveret ved at køre følgende PowerShell-kommando:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Hvis kommandoen returnerer resultater, angiver dette de Costly-ydelsestællere, der er aktiveret. Eksempelvis:
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
For at løse problemet, identificere den proces, der bruger et stort antal håndtag eller en stor mængde hukommelse.Processen kan have et problem med hukommelseslækage eller et problem med håndtagslækage. Som en løsning kan du genstarte processen.
Som standard, hvis du bruger Windows Server 2016 eller en nyere version af Windows, er tællerne for omkostningstung ydeevne deaktiveret fra og med følgende kumulative opdateringer:
- Windows Server 2016 / Windows 10 version 1607 (RS1)
18. oktober 2018-KB4462928 (OS Build 14393.2580) - Windows 10 version 1703 (RS2)
24. juli 2018-KB4338827 (OS Build 15063.1235) - Windows 10 version 1709 (RS3)
24. juli 2018-KB4338817 (OS Build 16299.579) - Windows 10 version 1803 (RS4)
16. juli 2018-KB4345421 (OS Build 17134.167)
Note
Når den kumulative opdatering er installeret, skal du, hvis du har brug for de klasser, der er relateret til tællerne Costly performance counters, indstille værdien Enable Costly Providers til 1 (DWORD) under følgende undernøgle i registreringsdatabasen for at gøre dem tilgængelige igen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
Den kumulative opdatering påvirker ikke adfærden, når en proces bruger et stort antal håndtag.
Dette problem opstår, når en klient forespørger på ydelsesklasserne. Dette er normalt et overvågningsprogram.
Som en løsning kan du også deaktivere overvågningsprogrammet for at forhindre oprettelsen af præstationsklasserne.
Mere information
WMI indeholder flere præstationsklasser. Du kan finde flere oplysninger under Ydelsestællerklasser.
Disse klasser oprettes dynamisk baseret på de ydelsestællere, der er tilgængelige på systemet. Alle klasserne oprettes på samme tid, ikke kun de klasser, der forespørges.
WMIPerfClass er det modul, der håndterer oprettelsen af disse klasser, når WMI-klienten forespørger om nogen af dem eller opregner de tilgængelige klasser.
Disse præstationsklasser gemmes i en cache, der bliver ugyldiggjort efter 15 til 20 minutter. Så snart cachen er ugyldiggjort, skal præstationsklasserne oprettes igen, hvis en klient anmoder om dem.
Skabelse af præstationsklasserne betyder, at WMIPerfClass.dll-modulet skal indlæses i en WmiPrvSE.exe-proces, og at den tilhørende kode skal udføres.