- 11/16/2020
- 3 minuty na przeczytanie
-
- D
- v
Ten artykuł przedstawia obejście problemu wysokiego użycia CPU przez proces WmiPrvSE.exe proces w regularnych odstępach czasu.
Oryginalna wersja produktu: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – wszystkie edycje
Oryginalny numer KB: 4483874
Symptomy
Gdy korzystasz z komputera z systemem Windows, zauważasz, że proces Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) przez kilka minut co 15 do 20 minut używa wysokiej wydajności procesora (blisko 100 procent).
Gdy pojawi się ten problem, użyj Menedżera zadań, aby zidentyfikować identyfikator procesu (PID) procesu WmiPrvSE.exe, który zużywa wysoką wydajność procesora. Następnie otwórz podniesiony wiersz poleceń i uruchom następujące polecenie:
tasklist /m wmiperfclass.dll
Wyświetlona zostanie lista procesów WmiPrvSE.exe, które mają załadowany ten moduł. Zazwyczaj na liście znajduje się tylko jeden proces. Jeśli jednak posiadasz klientów 32-bitowych i 64-bitowych, możesz zobaczyć dwa procesy. Oto przykładowe dane wyjściowe:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Jeśli PID wymienionego procesu pasuje do tego, który znalazłeś w Menedżerze zadań, prawdopodobnie napotkałeś problem opisany w tym artykule.
Przyczyna
Ten problem może być spowodowany przez jeden z następujących czynników.
Jeden lub więcej procesów używa dużej liczby uchwytów
Wszystkie uchwyty są przechowywane w strukturze jądra \BaseNamedObjects. Dostawca WMIPerfClass musi przeskanować tę strukturę podczas tworzenia klasy wydajności, która jest związana z obiektami Job.
Jeśli ta struktura jest rozdęta z powodu dużej liczby uchwytów, operacja będzie miała wysokie użycie procesora i będzie trwała dłużej niż normalnie.
Możesz spodziewać się wpływu na ten stan, gdy proces używa więcej niż około 30 000 uchwytów lub całkowita liczba uchwytów w systemie przekracza 50 000.
Aktualizacja, która zostanie wydana w marcu 2020 roku dla obsługiwanych wersji systemu operacyjnego, zawiera pewne optymalizacje wydajności i rozwiązuje niektóre warianty tego problemu. Więcej informacji na temat aktualizacji, która dotyczy posiadanej wersji systemu Windows, można znaleźć w historii Aktualizacji systemu Windows.
Jeden lub więcej procesów uruchomionych w systemie używa dużej ilości pamięci
To wpływa na tworzenie klas wydajności Proces, ponieważ trzeba będzie odpytywać obszar pamięci każdego uruchomionego procesu. Pamięć, która jest używana przez proces może być pofragmentowana, a to sprawia, że operacja jest bardziej zasobożerna. Dzieje się tak, ponieważ WMIPerfClass odpytywał również liczniki wydajności „Costly”.
Możesz sprawdzić, czy liczniki wydajności Costly są włączone, uruchamiając następujące polecenie PowerShell:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Jeśli polecenie zwraca wyniki, wskazuje to na liczniki wydajności Costly, które są włączone. Na przykład:
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
Obejście problemu
Aby rozwiązać problem, zidentyfikuj proces, który używa dużej liczby uchwytów lub dużej ilości pamięci.Proces ten może mieć wyciek pamięci lub problem z wyciekiem uchwytów. Jako obejście problemu należy ponownie uruchomić proces.
Domyślnie, jeśli używasz systemu Windows Server 2016 lub nowszej wersji systemu Windows, liczniki wydajności Costly są wyłączone począwszy od następujących aktualizacji zbiorczych:
- Windows Server 2016 / Windows 10 wersja 1607 (RS1)
October 18, 2018-KB4462928 (OS Build 14393.2580) - Windows 10 wersja 1703 (RS2)
24 lipca 2018-KB4338827 (OS Build 15063.1235) - Windows 10 wersja 1709 (RS3)
24 lipca 2018-KB4338817 (OS Build 16299.579) - Windows 10 wersja 1803 (RS4)
16 lipca 2018-KB4345421 (OS Build 17134.167)
Uwaga
Po zainstalowaniu aktualizacji zbiorczej, jeśli potrzebujesz klas, które są związane z licznikami wydajności Costly, ustaw wartość Enable Costly Providers na 1 (DWORD) pod następującym podkluczem rejestru, aby były one ponownie dostępne:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
Aktualizacja zbiorcza nie będzie miała wpływu na zachowanie, gdy proces używa dużej liczby uchwytów.
Ten problem występuje, gdy klient zapytuje o klasy wydajności. Zazwyczaj jest to aplikacja monitorująca.
Jako obejście problemu można również wyłączyć aplikację monitorującą, aby zapobiec tworzeniu klas wydajności.
Więcej informacji
WMI udostępnia kilka klas wydajności. Aby uzyskać więcej informacji, zobacz Klasy liczników wydajności.
Klasy te są tworzone dynamicznie na podstawie liczników wydajności, które są dostępne w systemie. Wszystkie klasy są tworzone w tym samym czasie, nie tylko te, które są odpytywane.
WMIPerfClass jest modułem, który zajmuje się tworzeniem tych klas, gdy klient WMI odpytuje dowolną z nich lub wylicza dostępne klasy.
Te klasy wydajności są przechowywane w pamięci podręcznej, która jest unieważniana po 15 do 20 minutach. Jak tylko pamięć podręczna zostanie unieważniona, klasy wydajności muszą zostać ponownie utworzone, jeśli klient o nie zapyta.
Tworzenie klas wydajności oznacza, że moduł WMIPerfClass.dll będzie musiał zostać załadowany wewnątrz procesu WmiPrvSE.exe, a związany z nim kod wykonany.
.