- 11/16/2020
- 3 minuter att läsa
-
- D
- v
Den här artikeln ger en lösning på problemet med hög CPU-förbrukning av WmiPrvSE.exe-processen med jämna mellanrum.
Original produktversion: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – alla utgåvor
Original KB-nummer: 4483874
Symtom
När du använder en Windows-baserad dator märker du att Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) använder hög CPU-kapacitet (nära 100 procent) i flera minuter var 15-20:e minut.
När problemet uppstår använder du Aktivitetshanteraren för att identifiera processidentifieraren (PID) för WmiPrvSE.exe-processen som förbrukar hög CPU-kapacitet. Öppna sedan en förhöjd kommandotolk och kör följande kommando:
tasklist /m wmiperfclass.dll
Listan över WmiPrvSE.exe-processer som har den här modulen laddad kommer att visas. Vanligtvis listas endast en process. Men om du har både 32-bitars- och 64-bitars-klienter kan det hända att du ser två processer. Detta är ett exempel på utdata:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Om PID:t för den listade processen stämmer överens med den process som du hittade i Aktivitetshanteraren, är det troligt att du stöter på det problem som beskrivs i den här artikeln.
Bakgrund
Detta problem kan orsakas av någon av följande faktorer:
En eller flera processer använder ett stort antal handtag
Alla handtag lagras i kärnstrukturen \BaseNamedObjects. WMIPerfClass-leverantören måste skanna den här strukturen när den skapar prestandaklassen som är relaterad till Job-objekten.
Om den här strukturen är uppblåst på grund av det höga antalet handtag kommer operationen att ha hög CPU-användning och ta längre tid än normalt.
Du kan förvänta dig en påverkan för det här tillståndet när en process använder mer än cirka 30 000 handtag, eller när det totala antalet handtag i systemet överstiger 50 000.
En uppdatering som släpps i mars 2020 för operativsystemversioner som stöds innehåller en viss optimering av prestandan och åtgärdar vissa varianter av det här problemet. Se historiken för Windows-uppdateringar för mer information om den uppdatering som gäller för din Windows-version.
En eller flera processer som körs i systemet använder mycket minne
Detta påverkar skapandet av prestandaklasserna Process eftersom minnesområdet för varje pågående process måste frågas ut. Minnet som används av processen kan vara fragmenterat, vilket gör operationen mer resurskrävande. Detta händer eftersom WMIPerfClass även frågar efter ”Costly”-prestandaräknare.
Du kan kontrollera om Costly-prestandaräknare är aktiverade genom att köra följande PowerShell-kommando:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Om kommandot returnerar resultat indikerar detta de Costly-prestandaräknare som är aktiverade. Till exempel:
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
Förbättring
För att åtgärda problemet, Identifiera den process som använder ett stort antal handtag eller en stor mängd minne.Processen kan ha en minnesläcka eller ett problem med handtagsläckage. Som en lösning startar du om processen.
Som standard om du använder Windows Server 2016 eller en senare version av Windows, inaktiveras räknare för kostsamma prestanda från och med följande kumulativa uppdateringar:
- Windows Server 2016 / Windows 10 version 1607 (RS1)
Den 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 kumulativa uppdateringen har installerats, om du behöver klasserna som är relaterade till prestandacontrollerna Costly, ska du ställa in värdet Enable Costly Providers till 1 (DWORD) under följande undernyckel i registret för att de ska bli tillgängliga igen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
Den kumulativa uppdateringen kommer inte att påverka beteendet när en process använder ett stort antal handtag.
Detta problem uppstår när en klient frågar efter prestandaklasserna. Detta är vanligtvis ett övervakningsprogram.
Som en lösning kan du också inaktivera övervakningsprogrammet för att förhindra skapandet av prestandaklasserna.
Mer information
WMI tillhandahåller flera prestandaklasser. Mer information finns i Preståndsräknarklasser.
Dessa klasser skapas dynamiskt baserat på de prestandaräknare som finns tillgängliga i systemet. Alla klasser skapas samtidigt, inte bara de klasser som efterfrågas.
WMIPerfClass är modulen som hanterar skapandet av dessa klasser när WMI-klienten efterfrågar någon av dem eller räknar upp de tillgängliga klasserna.
Dessa prestandaklasser lagras i ett cacheminne som ogiltigförklaras efter 15 till 20 minuter. Så snart cachen är ogiltig måste prestandaklasserna skapas igen om en klient begär dem.
Skapandet av prestandaklasserna innebär att modulen WMIPerfClass.dll måste laddas i en WmiPrvSE.exe-process och att den relaterade koden måste exekveras.