Hohe CPU-Auslastung durch den WMI-Anbieterhost (WmiPrvSE.exe) in regelmäßigen Abständen in Windows

Dieser Artikel bietet eine Problemumgehung für das Problem der hohen CPU-Auslastung durch WmiPrvSE.exe Prozess in regelmäßigen Abständen.

Gilt für:   Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Fenster 10 – alle Editionen
Ursprüngliche KB-Nummer:   4483874

Problembeschreibung

Wenn Sie einen Windows-basierten Computer verwenden, stellen Sie fest, dass der Windows Management Instrumentation (WMI)-Anbieterhost (WmiPrvSE.exe) eine hohe CPU-Kapazität (fast 100 Prozent) für mehrere Minuten alle 15 bis 20 Minuten verwendet.

Wenn das Problem auftritt, verwenden Sie den Task-Manager, um den Prozessbezeichner (PID) des WmiPrvSE.exe Prozesses zu identifizieren, der eine hohe CPU verbraucht. Öffnen Sie dann eine Eingabeaufforderung mit erhöhten Rechten, und führen Sie den folgenden Befehl aus:

tasklist /m wmiperfclass.dll

Die Liste der WmiPrvSE.exe Prozesse, die dieses Modul geladen haben, wird angezeigt. In der Regel wird nur ein Prozess aufgelistet. Wenn Sie jedoch sowohl 32-Bit- als auch 64-Bit-Clients haben, werden möglicherweise zwei Prozesse angezeigt. Dies ist eine Beispielausgabe:

          PiD-Module für Bildnamen
========== ======== ==========================
WmiPrvSE.exe     2140    WmiPerfClass.dll

Wenn die PID des aufgelisteten Prozesses mit dem im Task-Manager gefundenen übereinstimmt, tritt wahrscheinlich das in diesem Artikel beschriebene Problem auf.

Ursache

Dieses Problem kann durch einen der folgenden Faktoren verursacht werden.

Mindestens ein Prozess verwendet eine große Anzahl von Handles.

Alle Handles werden in der Kernelstruktur \BaseNamedObjects gespeichert. Der WMIPerfClass-Anbieter muss diese Struktur überprüfen, wenn er die Leistungsklasse erstellt, die mit den Job-Objekten verknüpft ist.

Wenn diese Struktur aufgrund der hohen Anzahl von Handles aufgebläht ist, hat der Vorgang eine hohe CPU-Auslastung und dauert länger als normal.

Sie können eine Auswirkung für diese Bedingung erwarten, wenn ein Prozess mehr als 30.000 Handles verwendet oder die Gesamtzahl der Handles auf dem System 50.000 überschreitet.

Ein Update, das im März 2020 für unterstützte Betriebssystemversionen veröffentlicht wurde, enthält einige Leistungsoptimierungen und behebt einige Varianten dieses Problems. Weitere Informationen zum Update, das für Ihre Windows-Version gilt, finden Sie im Windows Updateverlauf.

Mindestens ein auf dem System ausgeführter Prozess verwendet viel Arbeitsspeicher.

Dies wirkt sich auf die Erstellung der Prozessleistungsklassen aus, da der Speicherbereich jedes ausgeführten Prozesses abgefragt werden muss. Der vom Prozess verwendete Speicher kann fragmentiert sein, wodurch der Vorgang ressourcenintensiver wird. Dies geschieht, da WMIPerfClass auch "Kostspielige" Leistungsindikatoren abfragt.

Sie können überprüfen, ob kostspielige Leistungsindikatoren aktiviert sind, indem Sie den folgenden PowerShell-Befehl ausführen:

‎ (gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}  

Wenn der Befehl Ergebnisse zurückgibt, gibt dies die aktivierten Leistungsindikatoren für kostspielige Daten an. Beispiel:

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

Problemumgehung

Um das Problem zu beheben, identifizieren Sie den Prozess, der eine große Anzahl von Handles oder eine große Menge Arbeitsspeicher verwendet. Bei dem Prozess kann es zu einem Speicherverlust oder einem Handle-Leak-Problem gekommen sein. Um dieses Problem zu umgehen, starten Sie den Prozess neu.

Wenn Sie Windows Server 2016 oder eine neuere Version von Windows verwenden, werden die kostspieligen Leistungsindikatoren standardmäßig ab den folgenden kumulativen Updates deaktiviert:

Hinweis

Wenn Sie nach der Installation des kumulativen Updates die Klassen benötigen, die sich auf die Leistungsindikatoren für kostspielige Dienste beziehen, legen Sie den Wert "Teure Anbieter aktivieren" unter dem folgenden Registrierungsunterschlüssel auf 1 (DWORD) fest, um sie erneut verfügbar zu machen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem

Das kumulative Update wirkt sich nicht auf das Verhalten aus, wenn ein Prozess eine große Anzahl von Handles verwendet.

Dieses Problem tritt auf, wenn ein Client die Leistungsklassen abfragt. Dies ist in der Regel eine Überwachungsanwendung.

Als Problemumgehung können Sie auch die Überwachungsanwendung deaktivieren, um die Erstellung der Leistungsklassen zu verhindern.

Weitere Informationen

WMI stellt mehrere Leistungsklassen bereit. Weitere Informationen finden Sie unter Leistungsindikatorklassen.

Diese Klassen werden dynamisch basierend auf den Leistungsindikatoren erstellt, die auf dem System verfügbar sind. Alle Klassen werden gleichzeitig erstellt, nicht nur die Klassen, die abgefragt werden.

WMIPerfClass ist das Modul, das diese Klassen erstellt, wenn der WMI-Client eine dieser Klassen abfragt oder die verfügbaren Klassen aufzählt.

Diese Leistungsklassen werden in einem Cache gespeichert, der nach 15 bis 20 Minuten ungültig wird. Sobald der Cache ungültig ist, müssen die Leistungsklassen erneut erstellt werden, wenn ein Client sie anfordert.

Das Erstellen der Leistungsklassen bedeutet, dass das WMIPerfClass.dll Modul innerhalb eines WmiPrvSE.exe Prozesses geladen und der zugehörige Code ausgeführt werden muss.