Hohe CPU-Auslastung durch WMIPRVSE.EXE-Prozess in regelmäßigen Abständen unter Windows

Gilt für: Windows Server, version 1903Windows Server 2019, all versionsWindows Server 2016

Problembeschreibung


Wenn Sie einen Windows-basierten Computer verwenden, stellen Sie fest, dass der Windows Management Instrumentation (WMI)-Providerhost (WmiPrvSE.exe) alle 15 bis 20 Minuten für mehrere Minuten eine hohe CPU-Auslastung (nahezu 100 Prozent) aufweist.

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

tasklist /m wmiperfclass.dll

Die Liste von WMIPRVSE.EXE-Prozessen, bei denen dieses Modul geladen wurde, 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 das Beispiel einer Ausgabe: 

Wenn die PID des aufgelisteten Prozesses mit der im Task-Manager gefundenen übereinstimmt, ist es sehr wahrscheinlich, dass das in diesem Artikel beschriebene Problem auftritt.

Ursache


Dieses Problem hat möglicherweise eine der folgenden Ursachen.

Ein oder mehrere Prozesse verwenden eine hohe Anzahl von Handles

Alle Handles werden in der Kernelstruktur \BaseNamedObjects gespeichert. Der WMIPerfClass-Anbieter muss diese Struktur scannen, 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 auf diesen Zustand erwarten, wenn ein Prozess mehr als etwa 30.000 Handles verwendet oder die Gesamtzahl der Handles auf dem System 50.000 übersteigt.

Ein oder mehrere Prozesse, die auf dem System ausgeführt werden, verwenden viel Arbeitsspeicher

Dies wirkt sich auf die Erstellung der Prozessleistungsklassen aus, da der Speicherbereich jedes laufenden Prozesses abgefragt werden muss. Der vom Prozess verwendete Speicher ist möglicherweise fragmentiert, wodurch der Vorgang ressourcenintensiver wird. Dies geschieht, weil WMIPerfClass auch „kostenintensive“ Leistungsindikatoren abfragt.

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

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

Wenn der Befehl Ergebnisse liefert, zeigt dies die aktivierten kostenintensiven Leistungsindikatoren an. Beispiel:

Problemumgehung


Identifizieren Sie den Prozess, der eine große Anzahl von Handles oder eine große Menge an Arbeitsspeicher verwendet, um das Problem zu beheben. Der Prozess kann ein Speicherleck oder ein Problem mit einem Handle-Leck aufweisen.

Starten Sie den Prozess als Problemumgehung neu.

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

Hinweis Wenn Sie nach der Installation des kumulativen Updates die Klassen benötigen, die sich auf kostspielige Leistungsindikatoren beziehen, setzen Sie den Wert Kostspielige Anbieter aktivieren auf 1 (DWORD) unter dem folgenden Registrierungsunterschlüssel, um sie wieder verfügbar zu machen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem

Hinweis Das kumulative Update hat keinen Einfluss auf das Verhalten, wenn ein Prozess eine große Anzahl von Handles verwendet.

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

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

Weitere Informationen


WMI bietet mehrere Leistungsklassen an. Weitere Informationen finden Sie unter Leistungsindikatoren-Klassen.

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, dass das Erstellen dieser Klassen verarbeitet, 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 wird, müssen die Leistungsklassen erneut erstellt werden, wenn ein Client sie anfordert.

Die Erstellung der Leistungsklassen bedeutet, dass das Modul WMIPerfClass.dll innerhalb eines WMIPRVSE.EXE-Prozesses geladen und der zugehörige Code ausgeführt werden muss.