Behandeln von Problemen mit hoher CPU-Auslastung bei WMI

In diesem Artikel wird beschrieben, wie Sie Probleme mit hoher CPU-Auslastung der Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) auf jedem Windows-Betriebssystem diagnostizieren.

Identifizieren des Problems

In den meisten Szenarien wird die CPU vom WmiPrvse.exe-Prozess verbraucht, und es gibt einige Fälle, in denen svchost.exe , die den WMI-Dienst (Winmgmt) hosten, eine hohe CPU-Auslastung beansprucht.

Überprüfen Sie den Prozessbereich oder den Detailbereich des Task-Managers, um den genauen Prozess zu identifizieren.

Ermitteln Sie, ob der Prozess WmiPrvse.exe oder svchost.exe ist (hosten sie den WMI-Dienst Winmgmt), und identifizieren Sie die Prozess-ID.

Hinweis

Möglicherweise müssen Sie die SPALTE PID manuell hinzufügen, um die Prozess-ID aller Prozesse im Task-Manager anzuzeigen.

Im Folgenden sehen Sie ein Beispiel. Wechseln Sie zu Details des Task-Managers>, sortieren Sie nach Name , und suchen Sie den WmiPrvse.exe Prozess, der eine hohe CPU-Auslastung verbraucht. Notieren Sie sich die Prozess-ID (PID).

Dieser Screenshot zeigt mehrere Instanzen des WMI-Anbieterhosts (der WmiPrvse.exe Prozess) als aktiv und seine CPU-Auslastung.

Screenshot: Prozess über den Task-Manager

Dieser Screenshot zeigt Den Diensthost: Windows-Verwaltungsinstrumentation (svchost.exe , die den Winmgmt-Dienst hosten) und die CPU-Auslastung.

Screenshot: Details über den Task-Manager

Wechseln Sie zu Task-Manager-Dienste>, sortieren Sie nach Name, und suchen Sie den Winmgmt-Dienst. Notieren Sie sich die PID. Klicken Sie mit der rechten Maustaste auf den Dienst, und wählen Sie Zu Details wechseln aus, um den svchost.exe Prozess wie folgt zu suchen:

Screenshot: Dienste über den Task-Manager

Im Beispiel befindet sich von drei WmiPrvse.exe-Instanzen die PID 3648, die etwa 25 % der CPU-Auslastung verbraucht. Winmgmt wird unter dem svchost.exe-Prozess mit PID 2752 gehostet.

Grundlegendes zum CPU-Verbrauch

Dies umfasst hauptsächlich die Beobachtung des gesamten CPU-Verbrauchs und der ermittelten PID. Es ist wichtig zu beachten, wann, wie und die Häufigkeit des CPU-Verbrauchs.

Bewerten Sie die Situation, indem Sie verstehen, ob der CPU-Verbrauch während eines bestimmten Zeitraums hoch ist. Überprüfen Sie, ob aktivitäten vorhanden sind, z. B. das Ausführen bestimmter Aufgaben oder Dienste, das Ausführen von Überwachungsanwendungen oder das Ausführen von Skripts, die zu WmiPrvse.exe oder Winmgmt hoher CPU-Auslastung führen.

Verstehen Sie, ob es ein Muster gibt, was bedeutet, dass die CPU-Auslastung konsistent, inkonsistent, zufällig, sporadisch oder regelmäßig spitzen ist.

Identifizieren Sie die Häufigkeit des CPU-Verbrauchs. Überprüfen Sie, ob dies nur während der Produktionszeiten, außerhalb der Geschäftszeiten oder einer zufälligen Tageszeit auftritt. Dies kann auch während einer bestimmten Aktivität auftreten, z. B. während der Benutzeranmeldung oder -abmeldung.

Sie können den Task-Manager verwenden und sich visuell notieren, wie das CPU-Auslastungsmuster ist.

Hier sehen Sie ein Beispiel, das zeigt, wie Sie das tool Leistungsmonitor (Perfmon) verwenden, um die genauen Instanzen von WmiPrvse.exe mit der von Ihnen identifizierten PID zu identifizieren. Sie können auch eine grafische Ansicht der CPU-Auslastung eines beliebigen Prozesses (WmiPrvse.exe oder svchost.exe , der WMI-Dienst hosten) erhalten.

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und geben Sie Perfmon ein.

  2. Wählen Sie im linken Bereich Leistungsmonitor und dann im rechten Bereich das Pluszeichen (+) aus, um das Fenster Indikatoren hinzufügen zu öffnen.

  3. Erweitern Sie Prozess , und wählen Sie ID-Prozess aus. Wählen Sie alle WmiPrvse#- Instanzen und dann Hinzufügen>OK aus.

    Screenshot: Hinzufügen von ID-Prozessindikatoren

    Screenshot: Details der ID-Prozess-Leistungsindikatoren

  4. Erweitern Sie im Fenster Indikatoren hinzufügen den Knoten Prozess , und wählen Sie %Prozessorzeit aus. Wählen Sie den WmiPrvse#-Wert aus, der der PID entspricht, die eine hohe CPU-Auslastung verbraucht, und wählen Sie dannOKhinzufügen> aus.

    Screenshot: Hinzufügen von %Processor Time-Indikatoren

    Screenshot: Details der %Processor Time-Indikatoren.

  5. Für den Zähler "ID-Prozess" stellen die Zähler "Last", "Average", " Minimum" und " Maximum " die PID des jeweiligen WmiPrvse.exe Prozesses dar. Nachdem Sie den genauen instance ermittelt haben, der eine hohe CPU-Auslastung verbraucht, können Sie die verbleibenden Instanzen von WmiPrvse#-Instanzen aus der Liste entfernen, indem Sie ENTF drücken.

Im Beispiel wird festgestellt, dass WmiPrvse.exe PID 556 eine hohe CPU-Auslastung verbraucht hat und dass WmiPrvse#1 piD 556 in Leistungsmonitor entspricht.

Anschließend wird der Indikator %Processor Time of WmiPrvse#1 hinzugefügt, um eine grafische Liveansicht der CPU-Auslastung dieses Prozesses anzuzeigen. Im Beispiel wird die %Processor Time-Farbe von WmiPrvse#1 von gelb in rot geändert.

Die Schritte für die Suche nach dem richtigen svchost# in Leistungsmonitor bei hoher CPU-Auslastung durch svchost.exe, die den Wmimgmt-Dienst hosten, sind identisch.

Wenn Sie feststellen, dass ein svchost.exe Prozess, der den WMI-Dienst hostt, eine hohe CPU-Auslastung verursacht und vermuten, dass WMI zu dem Problem beiträgt, können Sie überprüfen, ob die PID des svchost.exe Prozesses den WMI-Dienst hosten wird, indem Sie den folgenden Befehl ausführen:

tasklist /svc /fi "Services eq Winmgmt"

Wenn der svchost.exe-Prozess mehrere Dienste enthält, können Sie den WMI-Dienst in einen eigenen svchost.exe-Prozess aufteilen, indem Sie die folgenden Schritte ausführen:

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten.

  2. Führen Sie den folgenden Befehl aus:

    sc config Winmgmt type= own
    
  3. Starten Sie den WMI-Dienst neu.

Nach dem Neustart des Diensts können Sie den Tasklist /svc Befehl ausführen, um zu überprüfen, ob der Winmgmt-Dienst unter seinem eigenen svchost.exe-Prozess ausgeführt wird.

Nachdem Sie das Problem behoben haben oder nicht mehr benötigen, dass sich der Dienst in einem eigenen svchost.exe-Prozess begibt, können Sie ihn wieder in den freigegebenen svchost.exe-Prozess einfügen. Sie können die Aktion ausführen, indem Sie den folgenden Befehl an einer Eingabeaufforderung ausführen und dann den WMI-Dienst erneut starten:

sc config Winmgmt type= share

Diagnose WmiPrvse.exe

Bisher verfügen Sie nur über die genaue PID von WmiPrvse.exe , die eine hohe CPU-Auslastung verbraucht. Sammeln Sie als Nächstes so viele Informationen wie möglich über diese PID. Dies hilft Ihnen, die Situation zu bewerten oder etwas zu identifizieren, das das Problem verursachen könnte. Sammeln Sie Informationen zur anderen Ressourcennutzung, oder identifizieren Sie den genauen WMI-Anbieter (DLL), der von der WmiPrvse.exe identifizierten PID gehostet wird.

Andere Ressourcennutzung wie Arbeitsspeicher, Handles, Threads und Benutzername

Sammeln Sie Informationen zu anderen Ressourcennutzungen, z. B. Arbeitsspeicher, Handles, Threads und Benutzername, zum Zeitpunkt einer hohen CPU-Auslastung. Sie können die Registerkarte Details im Task-Manager verwenden, die genaue PID auswählen und überprüfen.

Hinweis

Fügen Sie nach Bedarf zusätzliche Spalten hinzu.

Screenshot: Dienst mit hoher CPU-Auslastung im Task-Manager

Identifizieren sie den genauen WMI-Anbieter (DLL), der von der WmiPrvse.exe piD gehostet wird.

Prozess Explorer kann Ihnen helfen, die genauen Anbieter zu identifizieren, die in der identifizierten PID gehostet werden. Gehen Sie folgendermaßen vor:

  1. Führen Sie process Explorer als Administrator aus. Suchen Sie die identifizierteWmiPrvse.exe PID, wechseln Sie zu den zugehörigen Eigenschaften, und wählen Sie die Registerkarte WMI-Anbieter aus.

  2. Im folgenden Beispiel befindet sichWmiPrvse.exe PID 556 und wird als Host gefunden:

    • WMI-Anbieter: MS_NT_EVENTLOG_PROVIDER
    • Namespace: root\CIMV2
    • DLL-Pfad: %systemroot%\system32\wbem\ntevt.dll

    Screenshot: Eigenschaften WmiPrvSE.exe:556

In den meisten Fällen können mehrere Anbieter geladen sein. Es kann einer der Anbieter sein, die Zeit in der CPU verbringen, was zu Problemen mit hoher CPU-Auslastung führt.

Wenn das Problem zeitweilig oder selten auftritt, kann das WmiPrvse.exe , das das Problem verursacht, im Laufe der Zeit beendet werden. Wenn das Problem erneut auftritt, kann es sich um denselben Anbieter in einem neuen WmiPrvse.exe instance. Führen Sie in diesem Fall nach dem Notieren der Anbieter das folgende Cmdlet aus, um die aktuelle PID desWmiPrvse.exeProzesses anzuzeigen , der diesen Anbieter enthält:

tasklist /m <Provider DLL>

Hier ist ein Beispiel:

tasklist /m ntevt.dll 

Screenshot: Tasklist-Ausgabe der ntevt.dll-Datei

Daher ist es wichtig, zu verstehen, welche Anbieter im WmiPrvse.exe Prozess geladen werden, und notieren Sie sich jedes Mal die PID des WmiPrvse.exe Prozesses.

Sobald Sie über die Anbieter verfügen, die imWmiPrvse.exegeladen sind , was eine hohe CPU-Auslastung verursacht, können Sie verstehen, ob er Aufgaben verarbeitet.

Aufgaben können die eingehenden WMI-Abfragen sein, die vom Clientprozess an den WMI-Dienst übermittelt werden, der dann dem entsprechenden WMI-Anbieterprozess zugewiesen wird. Im Beispiel wird die Aufgabe an den MS_NT_EVENTLOG_PROVIDER Anbieter übermittelt. Der nächste Schritt ist also, die eingehenden Abfragen und Aufgaben an den MS_NT_EVENTLOG_PROVIDER Anbieter zu untersuchen.

Analysieren der eingehenden Abfragen

Die Untersuchung eingehender Abfragen umfasst Folgendes:

  • Identifizieren von WMI-Abfragen, die von WMI-Anbietern verarbeitet werden und eine hohe CPU-Auslastung verursachen.
  • WMI-Klassenabfragen.
  • Ein zugeordneter Benutzer.
  • Ein Clientprozess, der die Abfrage initiiert.

Die oben genannten Informationen können mithilfe des öffentlich verfügbaren Tools WMIMon oder WMI-Activity Betriebsprotokolle gesammelt und WMI-Tracing unter Ereignisanzeige verfügbar sein.

Betriebsprotokolle: Microsoft-Windows-WMI-Activity/Operational

Die eingehenden Abfragen werden als Betriebsereignisse im Microsoft-Windows-WMI-Aktivitäts-/Betriebsprotokoll protokolliert, das unter verfügbar ist:

> Ereignisanzeige Anwendungs- und Dienstprotokolle>Microsoft>Windows>WMI-Aktivität

Es werden mehrere Arten von Ereignissen protokolliert.

Wenn der WmiPrvse.exe Prozess, der eine hohe CPU-Auslastung verbraucht, von Zeit zu Zeit beendet wird und Sie bereits wissen, welche Anbieter geladen sind, kann das folgende Ereignis helfen, den derzeit aktivenWmiPrvse.exeProzess zu bestimmen , der den betreffenden Anbieter hosten soll.

Log Name:      Microsoft-Windows-WMI-Activity/Operational
Source:        Microsoft-Windows-WMI-Activity
Event ID:      5857
Task Category: None
User:          NETWORK SERVICE
Description:
MS_NT_EVENTLOG_PROVIDER provider started with result code 0x0. HostProcess = wmiprvse.exe; ProcessID = 556; ProviderPath = %systemroot%\system32\wbem\ntevt.dll

Aktivieren von "Analyse- und Debugprotokollen" zum Aktivieren der WMI-Ablaufverfolgung

Wählen Sie in EreignisanzeigeAnsicht>Analyse- und Debugprotokolle anzeigen aus, um das Debuggen und die Ablaufverfolgung für WMI-Aktivität zu aktivieren.

Screenshot: Betriebsbereit in Ereignisanzeige

Debuggen und Ablaufverfolgung sind standardmäßig deaktiviert, und jede von ihnen kann manuell aktiviert werden, indem Sie mit der rechten Maustaste auf Ablaufverfolgung oder Debuggen klicken und dann Protokoll aktivieren auswählen.

Hinweis

Wenn Sie Analyse- und Debugprotokolle anzeigen aktivieren, wird das Debuggen und die Ablaufverfolgung für fast alle Ereignisquellen aktiviert, und es wird eine zusätzliche Protokollierung erstellt. Daher muss dies nach Abschluss der Untersuchung deaktiviert werden und wird nicht mehr verwendet.

Diese Ablaufverfolgung kann aktiviert bleiben, während Sie eine hohe CPU-Auslastung durch den WmiPrvse.exe-Prozess beobachten oder lange genug, um das Verhalten einer hohen CPU-Auslastung zu erfassen, um die Protokolle sauber und moderate Größe zu halten, um die Analyse von Ablaufverfolgungen zu vereinfachen.

  1. Exportieren Sie die Ablaufverfolgungen, indem Sie mit der rechten Maustaste auf Ablaufverfolgung klicken und Alle Ereignisse speichern unter auswählen.

  2. Wählen Sie .xml oder .csv unter Dateityp aus.

    Hinweis

    Sie können andere bekannte Formate wie .EVTX z. B. nach Bedarf auswählen.

  3. Wählen Sie die gewünschte Sprache der Ablaufverfolgungsdatei aus.

  4. Sie können auch die WMI-Activity Betriebsereignisse separat im gewünschten Format speichern, damit Sie sie überprüfen und analysieren können.

Überprüfen der WMI-Ablaufverfolgungsdateien

Innerhalb der WMI-Ablaufverfolgung sind mehrere wichtige Vorgänge enthalten, die alle Teil eingehender WMI-Abfragen sind. Die Vorgänge sind in der IWbemServices-Schnittstelle (wbemcli.h) dokumentiert.

Einige der wichtigen Vorgänge sind:

  • IWbemServices::ExecQuery -Methode (wbemcli.h)
  • IWbemServices::ExecMethod -Methode (wbemcli.h)
  • IWbemServices::ExecQueryAsync -Methode (wbemcli.h)

Hier sehen Sie einen der Protokolleinträge aus der WMI-Tracing gespeicherten CSV-Datei:

Ebene Datum und Uhrzeit Quelle Ereignis-ID Taskkategorie Beschreibung
Information 05-05-23 14:48 Microsoft-Windows-WMI-Activity 11 Keine CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30693; OperationId = 30694; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520

Ein ähnliches Ereignis im XML-Format sieht wie folgt aus:

 <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
<System> 
<Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/> 
<EventID>11</EventID> 
<Version>0</Version> 
<Level>4</Level> 
<Task>0</Task> 
<Opcode>0</Opcode> 
<Keywords>0x8000000000000000</Keywords> 
<TimeCreated SystemTime="2023-05-05T13:09:18.7442455Z"/> 
<EventRecordID>112</EventRecordID> 
<Correlation ActivityID="{eddc1bfb-0000-0000-0000-18b6cabf5949}"/> 
<Execution ProcessID="2752" ThreadID="4132"/> 
<Channel>Microsoft-Windows-WMI-Activity/Trace</Channel> 
<Computer>21H2W10M.contoso.com</Computer> 
<Security UserID="S-1-5-18"/> 
</System> 
<UserData> 
<Operation_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI"> 
<CorrelationId>{345E5566-0000-0000-0000-67343241D901}</CorrelationId> 
<GroupOperationId>28089</GroupOperationId> 
<OperationId>28090</OperationId> 
<Operation>Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product</Operation> 
<ClientMachine>21H2W10M</ClientMachine> 
<ClientMachineFQDN>21H2W10M.contoso.com</ClientMachineFQDN> 
<User>CONTOSO\<UserName></User> 
<ClientProcessId>5484</ClientProcessId> 
<ClientProcessCreationTime>133277000000783520</ClientProcessCreationTime> 
<NamespaceName>\\.\root\cimv2</NamespaceName> 
<IsLocal>true</IsLocal> 
</Operation_New> 
</UserData> 
<RenderingInfo Culture="en-US"> 
<Message>CorrelationId = {345E5566-0000-0000-0000-67343241D901}; GroupOperationId = 28089; OperationId = 28090; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520</Message> 
<Level>Information</Level> 
<Task/> 
<Opcode>Info</Opcode> 
<Channel/> 
<Provider>Microsoft-Windows-WMI-Activity</Provider> 
<Keywords/> 
</RenderingInfo> 
</Event> 

Aus der ausgabe des obigen Beispielvorgangs können Sie die folgenden Informationen abrufen und verstehen:

  • Eine Abfrage wurde am: 05.05.2023 um 13:09:18 Uhr initiiert
  • Auf Computer: 21H2W10M,
  • Von einer Client-PID: 5484
  • Vorgangs-ID: 28089
  • Abfrage: select * from Win32_Product
  • Namespace: \\.\root\cimv2
  • Vorgang: IWbemServices::ExecQuery

Hier ist ein weiteres Protokoll:

Ebene Datum und Uhrzeit Quelle Ereignis-ID Taskkategorie Beschreibung
Information 05-05-23 14:47 Microsoft-Windows-WMI-Activity 12 Keine ProviderInfo für GroupOperationId = 30641; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Pfad = %systemroot%\system32\wbem\ntevt.dll

Das gleiche Ereignis im XML-Format:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
<System> 
<Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/> 
<EventID>12</EventID> 
<Version>0</Version> 
<Level>4</Level> 
<Task>0</Task> 
<Opcode>0</Opcode> 
<Keywords>0x8000000000000000</Keywords> 
<TimeCreated SystemTime="2023-05-05T13:09:18.8438242Z"/> 
<EventRecordID>120</EventRecordID> 
<Correlation ActivityID="{2a353ead-0000-0000-0000-256f9de5fabd}"/> 
<Execution ProcessID="2752" ThreadID="4348"/> 
<Channel>Microsoft-Windows-WMI-Activity/Trace</Channel> 
<Computer>21H2W10M.contoso.com</Computer> 
<Security UserID="S-1-5-21-0000000000-0000000000-00000000-1103"/> 
</System> 
<UserData> 
<Operation_Provider_Info_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI"> 
<GroupOperationId>28096</GroupOperationId> 
<Operation>Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent</Operation> 
<HostId>556</HostId> 
<ProviderName>MS_NT_EVENTLOG_PROVIDER</ProviderName> 
<ProviderGuid>{FD4F53E0-65DC-11d1-AB64-00C04FD9159E}</ProviderGuid> 
<Path>%systemroot%\system32\wbem\ntevt.dll</Path> 
</Operation_Provider_Info_New> 
</UserData> 
<RenderingInfo Culture="en-US"> 
<Message>ProviderInfo for GroupOperationId = 28096; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll</Message> 
<Level>Information</Level> 
<Task/> 
<Opcode>Info</Opcode> 
<Channel/> 
<Provider>Microsoft-Windows-WMI-Activity</Provider> 
<Keywords/> 
</RenderingInfo> 
</Event> 

Aus der Vorgangsausgabe des zweiten Beispiels können Sie die folgenden Informationen abrufen und verstehen:

  • Operation CreateInstanceEnum wird im Namen des Benutzers mit sid initiiert: UserID="S-1-5-21-0000000000000000000000000000000000-0000000-1103"
  • Am 05.05.2023 um 13:09 Uhr
  • Exakter Vorgang: Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent
  • Host-ID: 556
  • Anbietername: MS_NT_EVENTLOG_PROVIDER
  • Anbieterpfad: %systemroot%\system32\wbem\ntevt.dll

Suchen der Client-PIDs, die eine hohe CPU-Auslastung verursachen

Die Idee, diese Protokolldatei zu überprüfen, besteht darin, die Vorgänge aufzulisten, die dem identifizierten WmiPrvse.exe PID zugeordnet sind, der eine hohe CPU-Auslastung verbraucht, die eingehenden Abfragen zu verstehen und wer sie initiiert (der Clientprozess).

Im oben beschriebenen Beispiel verursacht die PID 552 eine hohe CPU-Auslastung.

Im zweiten Beispiel der Protokollausgabe wird der Vorgang CreateInstanceEnum für eine bestimmte WMI-Klasse Win32_NTLogEventinitiiert.

Weitere Informationen finden Sie unter Win32_NTLogEvent, die die Details des WMI-Anbieters enthält, die der WMI-Klasse zugeordnet sind.

Sie kennen nun den genauen WMI-Anbieter (MS_NT_EVENTLOG_PROVIDER), der im WmiPrvse.exe gehostet wird, der eine hohe CPU-Auslastung verursacht, die Host-ID (552) und die WMI-Klasse (Win32_NTLogEvent), die von einem Clientprozess abgefragt werden.

Abhängig vom Tool, das Sie zum Überprüfen der Ablaufverfolgungsdateien verwenden, können Sie die erforderlichen Filter anwenden, um nur die Vorgänge im Zusammenhang mit Win32_NTLogEvent oder WmiPrvse.exe PID 552 oder Host-ID 552 oder ntevt.dllzu überprüfen.

Wenn der Filter nur die Zeilen oder Vorgänge anzeigt, die "Win32_NTLogEvent" enthalten, sind die Ergebnisse:

Ebene Quelle Ereignis-ID Beschreibung
Information Microsoft-Windows-WMI-Activity 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30641; OperationId = 30642; Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520
Information Microsoft-Windows-WMI-Activity 12 ProviderInfo für GroupOperationId = 30641; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Pfad = %systemroot%\system32\wbem\ntevt.dll
Information Microsoft-Windows-WMI-Activity 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30697; OperationId = 30698; Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520
Information Microsoft-Windows-WMI-Activity 12 ProviderInfo für GroupOperationId = 30697; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Pfad = %systemroot%\system32\wbem\ntevt.dll

Aus den oben genannten Vorgängen können Sie die folgenden zusätzlichen Informationen abrufen:

  • Zeitstempel
  • Vorgangs-ID: 30642;
  • Der genaue Vorgang = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent;
  • Clientcomputer = 21H2W10M
  • User = CONTOSO\<UserName>
  • PID des Clients, der die Abfrage initiiert hat: 5484

Schließlich verfügen Sie über die PID eines Clientprozesses 5484, der eine Abfrage für Win32_NTLogEventinitiiert. Dies wird vom Anbieter MS_NT_EVENTLOG_PROVIDER verarbeitet und unter WmiPrvse.exe PID 552 gehostet, was zu einer hohen CPU-Auslastung führt.

Nachdem Sie die Client-PIDs eingegrenzt haben, verwenden Sie eines der folgenden Tools, um den Prozessnamen zu ermitteln.

Weitere Informationen zu WmiMon

WMImon.exe ist ein leistungsstarkes Überwachungstool, das die Nachverfolgung und Überwachung von Systemereignissen und der Ressourcennutzung des WMI-Diensts ermöglicht.

Es dient der wichtigen Funktion, die WMI-Aufrufe und Abfragen anderer Prozesse zu identifizieren sowie Informationen zur Abfragehäufigkeit, dem für die Abfragen verwendeten Benutzerkonto und den angeforderten Informationen bereitzustellen.

Diese Daten können für Systemadministratoren nützlich sein, die Leistungsprobleme beheben müssen.

Um diese Daten zu sammeln und zu analysieren, können Sie die Schritt-für-Schritt-Anleitung befolgen:

  1. Identifizieren Sie die PID des WmiPrvSE.exe , der die CPU-Auslastung nutzt, mithilfe der oben beschriebenen Methoden.
  2. Laden Sie das WMIMon.exe Tool von GitHub - luctalpe/WMIMon herunter. Das Tool dient zum Überwachen der WMI-Aktivität unter Windows.
  3. Extrahieren Sie den Inhalt der WMIMon_Binaries.zip-Datei in einen Ordner auf Ihrem Computer.
  4. Öffnen Sie eine Eingabeaufforderung als Administrator, und wechseln Sie zu dem Ordner, in den Sie die WMIMon-Dateien extrahiert haben.
  5. Führen Sie die WMIMon.exe-Datei aus, indem Sie in der Eingabeaufforderung eingeben WMIMon.exe und die EINGABETASTE drücken.
  6. WMIMon beginnt nun mit der Überwachung der WMI-Aufrufe, die von Prozessen im System ausgeführt werden, einschließlich der in Schritt 1 identifizierten.
  7. WMIMon zeigt Informationen wie die Clientprozess-ID, den vom Vorgang aufgerufenen WMI-Namespace, den WMI-Klassennamen und das Benutzerkonto an, das für die Anforderung verwendet wird.
  8. Analysieren Sie die Ausgabe von WMIMon, um zu ermitteln, welche Prozesse häufig WMI-Aufrufe ausführen und möglicherweise eine hohe CPU-Auslastung verursachen.

Wenn Sie diese Schritte ausführen, können Sie WMIMon.exe effektiv verwenden, um die WMI-Aktivität auf Ihrem System zu überwachen und Leistungs- oder Sicherheitsprobleme zu identifizieren, die durch übermäßige WMI-Nutzung verursacht werden.

Hier ist ein Beispiel:

Screenshot der von WMIMon erfassten Daten.

Hinweis

Sie können die von WMIMon erfassten Daten in eine Textdatei exportieren, indem Sie den WMIMon.exe > Data.txt Befehl in der Eingabeaufforderung ausführen. Drücken Sie STRG + C, um die Datenerfassung zu beenden.

Es kann knifflige Situationen geben, in denen die Eingrenzung einer bestimmten Client-PID, -Anwendung oder exe-Datei unmöglich ist. In solchen Fällen kann es sinnvoll sein, eine gemeinsame Entität wie einen Benutzernamen oder einen zugeordneten Computer zu berücksichtigen.

Das heißt, sie sollten verstehen, ob der Benutzer, der die Abfrage initiiert, ein Dienstkonto ist oder einer bestimmten Anwendung zugeordnet ist.

Weitere Lösungen

Nachdem Sie den Verdächtigen abgeschlossen haben, können Sie den Dienst vorübergehend deaktivieren oder die zugehörige Anwendung deinstallieren und überprüfen, ob das Problem mit hoher CPU-Auslastung behoben wird.

Im Folgenden finden Sie einige Szenarien, in denen die Deaktivierung Ihre Beobachtungen überprüfen kann.

  • Überwachen von Anwendungen und Diensten
  • System Center Configuration Manager (SCCM) (policyhost.exe oder Monitoringhost.exe)
  • Powershell.exe Ausführen von Skripts, die WMI-Abfragen enthalten
  • Anwendungen von Drittanbietern

Datensammlung

Wenn Sie Unterstützung vom Microsoft-Support benötigen, empfehlen wir Ihnen, die Informationen zu sammeln, indem Sie die Schritte unter Sammeln von Informationen mithilfe von TSS für Fragen der Benutzerfreundlichkeit ausführen.

Sie können informationen auch mithilfe des tools WMI-Collect sammeln. Die Schritte sind hier aufgeführt:

  1. Laden Sie WMI-Collect.zip herunter, und extrahieren Sie sie in einen Ordner, z. B. C:\temp.

  2. Führen Sie an einer PowerShell-Eingabeaufforderung mit erhöhten Rechten das WMI-Collect.ps1 Skript aus dem Ordner aus, in dem das Skript gespeichert ist. Beispiel:

    C:\temp\WMI-Collect.ps1 -Logs -Trace -Activity -Kernel -WPR -PerfMonWMIPrvSE
    

    Hinweis

    • Lassen Sie die PowerShell-Eingabeaufforderung mit der Meldung "Drücken Sie die EINGABETASTE, um die Erfassung zu beenden:" geöffnet, und stellen Sie sicher, dass der WmiPrvse.exe Prozess oder das Problem mit hoher CPU-Auslastung des WMI-Diensts reproduziert wird.
    • Lassen Sie die Ablaufverfolgung nicht länger als eine Minute aktiviert.
  3. Beenden Sie die Ablaufverfolgung, indem Sie die EINGABETASTE drücken.

Das Skript erstellt einen Unterordner, der die Ergebnisse aller Ablaufverfolgungen und die Diagnoseinformationen enthält. Komprimieren Sie den Ordner. Nachdem ein Supportfall erstellt wurde, kann diese Datei zur Analyse in den sicheren Arbeitsbereich hochgeladen werden.