- 11/16/2020
- 3 Minuten zum Lesen
-
- D
- v
Dieser Artikel bietet einen Workaround für das Problem der hohen CPU-Auslastung durch den WmiPrvSE.exe-Prozesses in regelmäßigen Abständen.
Originalproduktversion: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10 – alle Editionen
Original KB-Nummer: 4483874
Symptome
Wenn Sie einen Windows-basierten Computer verwenden, stellen Sie fest, dass der Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) alle 15 bis 20 Minuten für mehrere Minuten eine hohe CPU-Auslastung (fast 100 Prozent) aufweist.
Wenn das Problem auftritt, verwenden Sie den Task-Manager, um die Prozesskennung (PID) des Prozesses WmiPrvSE.exe zu ermitteln, der eine hohe CPU-Auslastung aufweist. Öffnen Sie dann eine erweiterte Eingabeaufforderung 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. Normalerweise 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:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Wenn die PID des aufgelisteten Prozesses mit der übereinstimmt, die Sie im Task-Manager gefunden haben, ist es wahrscheinlich, dass das in diesem Artikel beschriebene Problem bei Ihnen auftritt.
Ursache
Dieses Problem kann durch einen der folgenden Faktoren verursacht werden.
Ein oder mehrere Prozesse verwenden eine hohe Anzahl von Handles
Alle Handles sind in der Kernelstruktur \BaseNamedObjects gespeichert. Der WMIPerfClass-Anbieter muss diese Struktur scannen, wenn er die Leistungsklasse erstellt, die sich auf die Auftragsobjekte bezieht.
Wenn diese Struktur aufgrund der hohen Anzahl von Handles aufgebläht ist, wird der Vorgang eine hohe CPU-Auslastung haben und länger als normal dauern.
Sie können mit einer Auswirkung dieser Bedingung rechnen, wenn ein Prozess mehr als etwa 30.000 Handles verwendet oder die Gesamtzahl der Handles auf dem System 50.000 übersteigt.
Ein Update, das im März 2020 für unterstützte Betriebssystemversionen veröffentlicht wird, enthält einige Leistungsoptimierungen und behebt einige Varianten dieses Problems. Weitere Informationen zu dem Update, das für Ihre Windows-Version gilt, finden Sie in der Windows-Update-Historie.
Ein oder mehrere auf dem System laufende Prozesse verwenden viel Speicher
Dies wirkt sich auf die Erstellung der Prozessleistungsklassen aus, da der Speicherbereich jedes laufenden Prozesses abgefragt werden muss. Der vom Prozess verwendete Speicher kann fragmentiert sein, was den Vorgang ressourcenintensiver macht. Dies geschieht, weil 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, zeigt dies die kostspieligen Leistungsindikatoren an, die aktiviert sind. 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
Abhilfe
Um das Problem zu beheben, identifizieren Sie den Prozess, der eine große Anzahl von Handles oder eine große Menge an Speicher verwendet.Der Prozess hat möglicherweise ein Speicherleck oder ein Handle-Leck. Starten Sie als Abhilfe den Prozess neu.
Wenn Sie Windows Server 2016 oder eine neuere Version von Windows verwenden, sind die Costly-Leistungszähler standardmäßig ab den folgenden kumulativen Updates deaktiviert:
- Windows Server 2016 / Windows 10 Version 1607 (RS1)
Oktober 18, 2018-KB4462928 (OS Build 14393.2580) - Windows 10 Version 1703 (RS2)
Juli 24, 2018-KB4338827 (OS Build 15063.1235) - Windows 10 Version 1709 (RS3)
Juli 24, 2018-KB4338817 (OS Build 16299.579) - Windows 10 Version 1803 (RS4)
Juli 16, 2018-KB4345421 (OS Build 17134.167)
Hinweis
Wenn Sie nach der Installation des kumulativen Updates die Klassen benötigen, die sich auf die Costly-Leistungszähler beziehen, setzen Sie den Wert Enable Costly Providers auf 1 (DWORD) unter dem folgenden Registrierungsunterschlüssel, um sie wieder 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 Abhilfe können Sie auch die Überwachungsanwendung deaktivieren, um die Erstellung der Leistungsklassen zu verhindern.
Weitere Informationen
WMI bietet mehrere Leistungsklassen. Weitere Informationen finden Sie unter Leistungszähler-Klassen.
Diese Klassen werden dynamisch auf der Grundlage der im System verfügbaren Leistungszähler erstellt. Alle Klassen werden gleichzeitig erstellt, nicht nur die Klassen, die abgefragt werden.
WMIPerfClass ist das Modul, das die Erstellung dieser Klassen übernimmt, wenn der WMI-Client eine von ihnen abfragt oder die verfügbaren Klassen aufzählt.
Diese Leistungsklassen werden in einem Cache gespeichert, der nach 15 bis 20 Minuten ungültig gemacht wird. Sobald der Cache ungültig wird, müssen die Leistungsklassen erneut erstellt werden, wenn ein Client sie anfordert.
Das Erstellen der Leistungsklassen bedeutet, dass das Modul WMIPerfClass.dll innerhalb eines WmiPrvSE.exe-Prozesses geladen und der entsprechende Code ausgeführt werden muss.