Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie Probleme mit hoher CPU-Auslastung (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 Instanzen, in denen svchost.exe Hosten des WMI-Diensts (Winmgmt) eine hohe CPU-Auslastung verbraucht.
Überprüfen Sie den Bereich "Prozesse" oder "Details" 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.
Notiz
Möglicherweise müssen Sie die PID-Spalte manuell hinzufügen, um die Prozess-ID aller Prozesse im Task-Manager anzuzeigen.
Im Folgenden sehen Sie ein Beispiel. Wechseln Sie zu Task-Manager-Details>, sortieren Sie dann 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.
Dieser Screenshot zeigt den Diensthost: Windows-Verwaltungsinstrumentation (svchost.exe hosten den Winmgmt-Dienst) und die CPU-Auslastung.
Wechseln Sie zu Task Manager>Services, 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 finden:
In dem Beispiel befindet sich piD 3648 aus drei WmiPrvse.exe Instanzen, die etwa 25 % der CPU-Auslastung verbrauchen. Winmgmt wird unter dem svchost.exe Prozess mit PID 2752 gehostet.
Grundlegendes zur CPU-Auslastung
Dies umfasst hauptsächlich die Beobachtung des gesamten CPU-Verbrauchs und der identifizierten PID. Es ist wichtig zu beachten, wann, wie und wie die Häufigkeit der CPU-Auslastung.
Bewerten Sie die Situation, indem Sie verstehen, ob der CPU-Verbrauch während einer bestimmten Zeit hoch ist. Überprüfen Sie, ob aktivitäten vorhanden sind, z. B. das Ausführen bestimmter Aufgaben oder Dienste aktiv, das Ausführen von Überwachungsanwendungen oder das Ausführen von Skripts, die zu WmiPrvse.exe oder winmgmt hoher CPU führen.
Verstehen Sie, ob ein Muster vorhanden ist, was bedeutet, dass die CPU-Auslastung konsistent, inkonsistent, zufällig, sporadisch oder über regelmäßige Spitzen verfügt.
Identifizieren Sie die Häufigkeit des CPU-Verbrauchs. Überprüfen Sie, ob sie nur während der Produktionsstunden, außerhalb der Geschäftszeiten oder einer zufälligen Tageszeit auftritt. Sie kann auch während einer bestimmten Aktivität auftreten, z. B. die Benutzeranmeldung oder -abmeldung.
Sie können den Task-Manager verwenden und visuell feststellen, wie das CPU-Nutzungsmuster ist.
Im Folgenden finden 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 einen grafischen Überblick über den CPU-Verbrauch eines beliebigen Prozesses (WmiPrvse.exe oder svchost.exe Hosting-WMI-Diensts) erhalten.
Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und geben Sie Perfmon ein.
Wählen Sie im linken Bereich Leistungsmonitor aus, und wählen Sie im rechten Bereich das Pluszeichen (+) aus, um das Fenster "Zähler hinzufügen" zu öffnen.
Erweitern Sie "Prozess", und wählen Sie "ID-Prozess" aus. Wählen Sie alle WmiPrvse#-Instanzen und dann "OK hinzufügen">aus.
Erweitern Sie im Fenster "Leistungsindikatoren hinzufügen" den Befehl "Prozess", und wählen Sie "%Prozessorzeit" aus. Wählen Sie den WmiPrvse#-Wert aus, der die PID mit hoher CPU-Auslastung abgleicht, und wählen Sie dann "OK hinzufügen">aus.
Für den Zähler "ID-Prozess" stellen der Letzte, der Mittelwert, das Minimum und "Maximum" die PID des jeweiligen WmiPrvse.exe Prozesses dar. Nachdem Sie die genaue Instanz identifiziert haben, die 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 wurde festgestellt, dass WmiPrvse.exe PID 556 eine hohe CPU-Auslastung verbrauchte, und es ist WmiPrvse#1, der PID 556 in Leistungsmonitor entspricht.
Then counter %Processor Time of WmiPrvse#1 is added to see a live graphic view of the CPU usage of this process. Im Beispiel wird die %Prozessorzeitfarbe von WmiPrvse#1 von Gelb in Rot geändert.
Die Schritte sind für die Suche nach dem richtigen svchost# in Leistungsmonitor im Fall einer hohen CPU-Auslastung durch svchost.exe Hosting des Wmimgmt-Diensts 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 bestätigen, ob die PID des svchost.exe Prozesses den WMI-Dienst hosten, 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 unterteilen, indem Sie die folgenden Schritte ausführen:
Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten.
Führen Sie den folgenden Befehl aus:
sc config Winmgmt type= own
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 oder den Dienst nicht mehr in einem eigenen svchost.exe Prozess befindet, 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 haben Sie nur die genaue PID von WmiPrvse.exe , die eine hohe CPU-Auslastung verbrauchen. Sammeln Sie als Nächstes so viele Informationen wie möglich über diese PID. Auf diese Weise können Sie die Situation bewerten oder etwas identifizieren, das das Problem verursachen könnte. Sammeln Sie Informationen zur anderen Ressourcennutzung, oder identifizieren Sie den genauen WMI-Anbieter (DLL), der von der identifizierten WmiPrvse.exe PID gehostet wird.
Andere Ressourcennutzung wie Arbeitsspeicher, Handles, Threads und Benutzername
Sammeln Sie Informationen zur anderen Ressourcenauslastung, z. B. Arbeitsspeicher, Handles, Threads und Benutzername, zum Zeitpunkt der hohen CPU-Auslastung. Sie können die Registerkarte "Details " im Task-Manager verwenden, die genaue PID auswählen und überprüfen.
Notiz
Fügen Sie bei Bedarf zusätzliche Spalten hinzu.
Identifizieren Des genauen WMI-Anbieters (DLL), der von der identifizierten WmiPrvse.exe PID gehostet wird
Es gibt mehrere Methoden, um die im WmiPrvSE.exe Prozess geladenen Anbieter zu identifizieren.
Verwenden Von Skripts: Auflisten aller ausgeführten WMI-Anbieter zum Ausgeben aller ausgeführten WMI-Anbieter (Windows Management Instrumentation).
Der Prozess-Explorer kann Ihnen dabei helfen, die genauen Anbieter zu identifizieren, die in der identifizierten PID gehostet werden. Führen Sie folgende Schritte aus:
Führen Sie den Prozess-Explorer als Administrator aus. Suchen Sie die identifizierten WmiPrvse.exe PID, wechseln Sie zu ihren Eigenschaften, und wählen Sie die Registerkarte "WMI-Anbieter" aus .
Im folgenden Beispiel befindet sich WmiPrvse.exe PID 556 und wurde als Hosting gefunden:
- WMI-Anbieter:
MS_NT_EVENTLOG_PROVIDER
- Namespace:
root\CIMV2
- DLL-Pfad: %systemroot%\system32\wbem\ntevt.dll
- WMI-Anbieter:
In den meisten Fällen kann mehr als ein Anbieter geladen werden. Es kann sich um einen der Anbieter, die Zeit in der CPU verbringen, was zu hohen CPU-Problemen führt.
Manchmal, wenn das Problem zeitweise oder selten ist, kann die WmiPrvse.exe , die das Problem verursachen, im Laufe der Zeit beendet werden. Wenn das Problem erneut auftritt, kann es sich um denselben Anbieter in einer neuen WmiPrvse.exe Instanz handeln. Führen Sie in diesem Fall nach dem Notieren des Anbieters das folgende Cmdlet aus, um die aktuelle PID des WmiPrvse.exe Prozesses anzuzeigen, der diesen Anbieter enthält:
tasklist /m <Provider DLL>
Hier sehen Sie ein Beispiel:
tasklist /m ntevt.dll
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.
Nachdem Sie die Anbieter geladen haben, die in der WmiPrvse.exe geladen werden, was zu einer hohen CPU-Auslastung führt, können Sie verstehen, ob sie 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 wird also sein, die eingehenden Abfragen und Aufgaben an den MS_NT_EVENTLOG_PROVIDER
Anbieter zu untersuchen.
Analysieren der eingehenden Abfragen
Das Untersuchen eingehender Abfragen umfasst Folgendes:
- Identifizieren von WMI-Abfragen, die von WMI-Anbietern verarbeitet werden, was zu einer hohen CPU-Auslastung führt.
- WMI-Klassenabfragen.
- Ein zugeordneter Benutzer.
- Ein Clientprozess, der die Abfrage initiiert.
Die oben genannten Informationen können mit dem öffentlich verfügbaren Tool WMIMon oder WMI-Activity Operational logs und WMI-Tracing gesammelt werden, die unter Ereignisanzeige verfügbar sind.
Betriebsprotokolle: Microsoft-Windows-WMI-Activity/Operational
Die eingehenden Abfragen werden als Betriebsereignisse im Microsoft-Windows-WMI-Activity/Operational log protokolliert, das unter:
Ereignisanzeige Applications and Services Logs>Microsoft>Windows>WMI-Activity>
Es gibt mehrere Arten von Ereignissen protokolliert.
Wenn der WmiPrvse.exe Prozess, der eine hohe CPU verbraucht, von Zeit zu Zeit beendet wird und Sie bereits wissen, welche Anbieter geladen werden, kann das folgende Ereignis helfen, den derzeit aktiven WmiPrvse.exe Prozess zu ermitteln, 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 Ereignisanzeige "Analyse- und Debugprotokolle anzeigen>" aus, um das Debuggen und die Ablaufverfolgung für WMI-Aktivität zu aktivieren.
"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.
Notiz
Durch aktivieren von "Analyse- und Debugprotokolle anzeigen" können Sie Debug- und Ablaufverfolgung für fast alle Ereignisquellen aktivieren und zusätzliche Protokollierung erstellen. Daher muss dies deaktiviert werden, sobald die Untersuchung abgeschlossen ist und nicht mehr verwendet wird.
Diese Ablaufverfolgung kann aktiviert werden, während Sie eine hohe CPU-Auslastung durch den WmiPrvse.exe Prozess oder lange genug beobachten, um das Verhalten einer hohen CPU-Auslastung zu erfassen, um die Protokolle sauber und moderat zu halten, um die Analyse von Ablaufverfolgungen zu vereinfachen.
Exportieren Sie die Ablaufverfolgungen, indem Sie mit der rechten Maustaste auf "Ablaufverfolgung" klicken und "Alle Ereignisse speichern unter... auswählen".
Wählen Sie den Typ "Speichern unter" aus, oder
.csv
wählen Sie.xml
sie in "Speichern unter" aus.Notiz
Sie können andere vertraute Formate auswählen, z
.EVTX
. B. nach Bedarf.Wählen Sie die gewünschte Sprache der Ablaufverfolgungsdatei aus.
Sie können auch die WMI-Activity Operational Events separat speichern, im gewünschten Format, das Sie überprüfen und analysieren möchten.
Ü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 werden 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 GESPEICHERTen CSV-Datei der WMI-Ablaufverfolgung:
Ebene | Datum und Uhrzeit | `Source` | Ereignis-ID | Aufgabenkategorie | Beschreibung |
---|---|---|---|---|---|
Informationen | 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; Benutzer = 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 obigen Beispielvorgangsausgabe können Sie die folgenden Informationen abrufen und verstehen:
- Eine Abfrage wurde initiiert am: 2023-05-05 um 13:09:18
- Auf Maschine: 21H2W10M,
- Von einem 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 | `Source` | Ereignis-ID | Aufgabenkategorie | Beschreibung |
---|---|---|---|---|---|
Informationen | 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 |
Dasselbe 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 Auftrag des Benutzers mit SID initiiert: UserID="S-1-5-21-000000000000-000000000-0000000-1103"
- Am 2023-05-05 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 mit der identifizierten WmiPrvse.exe PID verknüpften Vorgänge aufzulisten, die eine hohe CPU-Auslastung verbrauchen, die eingehenden Abfragen verstehen und wer sie initiiert (den Clientprozess).
Im oben beschriebenen Beispiel ist es die PID 552, die eine hohe CPU-Auslastung verursacht.
Aus dem zweiten Beispiel der Protokollausgabe wird der Vorgang CreateInstanceEnum für bestimmte WMI-Klassen Win32_NTLogEvent
initiiert.
Weitere Informationen finden Sie unter Win32_NTLogEvent, das die WMI-Anbieterdetails enthält, die der WMI-Klasse zugeordnet sind.
Sie kennen nun den genauen WMI-Anbieter,MS_NT_EVENTLOG_PROVIDER
der in der WmiPrvse.exe gehostet wird, die zu einer hohen CPU-Auslastung, der Host-ID (552) und der WMI-Klasse (Win32_NTLogEvent) führt, die von einigen Clientprozessen abgefragt wird.
Je nach Tool, das Sie zum Überprüfen der Ablaufverfolgungsdateien verwenden, können Sie erforderliche Filter anwenden, um nur die Vorgänge zu überprüfen, die mit oder WmiPrvse.exe PID 552 oder Host-ID 552 oder ntevt.dll zusammenhängenWin32_NTLogEvent
.
Wenn der Filter nur die Zeilen oder Vorgänge anzeigt, die "Win32_NTLogEvent" enthalten, sind die Ergebnisse:
Ebene | Quelle | Ereignis-ID | Beschreibung |
---|---|---|---|
Informationen | 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; Benutzer = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520 |
Informationen | 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 |
Informationen | 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; Benutzer = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520 |
Informationen | 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 erhalten Sie die folgenden zusätzlichen Informationen:
- Timestamp
- Vorgangs-ID: 30642;
- Der genaue Vorgang =
Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent
; - Clientcomputer = 21H2W10M
- Benutzer = CONTOSO\<UserName>
- PID des Clients, der die Abfrage initiiert hat: 5484
Schließlich haben Sie die PID eines Clientprozesses 5484, der eine Abfrage Win32_NTLogEvent
initiiert. 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 finden.
Weitere Informationen zu WmiMon
WMImon.exe ist ein leistungsfähiges Überwachungstool, mit dem Systemereignisse und die Ressourcennutzung des WMI-Diensts nachverfolgt und überwacht werden können.
Es dient der wichtigen Funktion, die WMI-Aufrufe und Abfragen anderer Prozesse zu identifizieren sowie Informationen über die Abfragehäufigkeit, das für die Abfragen verwendete Benutzerkonto und die 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 schrittweisen Anleitungen befolgen:
- Identifizieren Sie die PID der WmiPrvSE.exe , die die CPU-Auslastung mit den oben beschriebenen Methoden verbraucht.
- Laden Sie das WMIMon.exe Tool von GitHub herunter – luctalpe/WMIMon. Das Tool besteht darin, die WMI-Aktivität unter Windows zu überwachen.
- Extrahieren Sie den Inhalt der WMIMon_Binaries.zip Datei in einen Ordner auf Ihrem Computer.
- Öffnen Sie eine Eingabeaufforderung als Administrator, und wechseln Sie zu dem Ordner, in dem Sie die WMIMon-Dateien extrahiert haben.
- Führen Sie die WMIMon.exe Datei aus, indem Sie die Eingabeaufforderung eingeben
WMIMon.exe
und die EINGABETASTE drücken. - WMIMon überwacht nun die WMI-Aufrufe von Prozessen im System, einschließlich der in Schritt 1 identifizierten.
- WMIMon zeigt Informationen wie die Clientprozess-ID, den vom Vorgang aufgerufenen WMI-Namespace, den WMI-Klassennamen und das Benutzerkonto an, mit dem die Anforderung ausgeführt wird.
- Analysieren Sie die Ausgabe von WMIMon, um zu ermitteln, welche Prozesse(en) häufige WMI-Aufrufe durchführen und möglicherweise eine hohe CPU-Auslastung verursachen.
Mithilfe dieser Schritte können Sie WMIMon.exe effektiv verwenden, um WMI-Aktivitäten auf Ihrem System zu überwachen und Leistungs- oder Sicherheitsprobleme zu identifizieren, die durch eine übermäßige WMI-Verwendung verursacht werden.
Hier sehen Sie ein Beispiel:
Notiz
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. Um die Datenerfassung zu beenden, drücken Sie STRG + C.
Es kann schwierig sein, situationen, in denen das Einschränken einer bestimmten Client-PID, Anwendung oder EXE unmöglich ist. In solchen Fällen kann es sinnvoll sein, eine gemeinsame Entität wie einen Benutzernamen oder einen computerbezogenen Computer zu berücksichtigen.
Das heißt, verstehen Sie, ob der Benutzer, der die Abfrage initiiert, ein Dienstkonto ist oder einer bestimmten Anwendung zugeordnet ist.
Andere Lösungen
Nachdem Sie den Verdächtigen abgeschlossen haben, können Sie erwägen, den Dienst vorübergehend zu deaktivieren oder die ihm zugeordnete Anwendung zu deinstallieren und zu überprüfen, ob das Problem mit hoher CPU-Auslastung behoben wird.
Hier sind 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
- Jede Drittanbieteranwendung
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.
Laden Sie TSS.zip herunter, und extrahieren Sie den Inhalt.
Starten Sie die Ablaufverfolgung, indem Sie das folgende Cmdlet über eine PowerShell-Eingabeaufforderung mit erhöhten Rechten ausführen. Führen Sie die Ablaufverfolgung aus, wenn auf dem Computer ein hohes CPU-Problem auftritt oder das Problem wiedergibt.
.\TSS.ps1 -UEX_WMIBase -WIN_Kernel -ETWflags 1 -WPR CPU -Perfmon UEX_WMIPrvSE -PerfIntervalSec 1 -noBasicLog
Notiz
Lassen Sie die Ablaufverfolgung länger als zwei Minuten laufen. Stellen Sie sicher, dass das Problem während dieses Fensters reproduziert wird.
Beenden Sie die Ablaufverfolgung, indem Sie anweisungen in der PowerShell-Eingabeaufforderung gemäß dem TSS-Toolset befolgen.
Das Skript erstellt eine ZIP-Datei mit den Ergebnissen aller Ablaufverfolgungen und der Diagnoseinformationen. Nachdem ein Supportfall erstellt wurde, kann diese Datei zur Analyse in den sicheren Arbeitsbereich hochgeladen werden.