Condividi tramite


Risolvere i problemi di utilizzo elevato della CPU WMI

Questo articolo illustra come diagnosticare i problemi di utilizzo elevato della CPU di Strumentazione gestione Windows (WMI) in qualsiasi sistema operativo Windows.

Identificare il problema

Nella maggior parte degli scenari, la CPU viene usata dal processo di WmiPrvse.exe e esistono alcune istanze in cui svchost.exe che ospita il servizio WMI (Winmgmt) utilizza un utilizzo elevato della CPU.

Esaminare il riquadro Processi di Gestione attività o il riquadro Dettagli per identificare il processo esatto

Identificare se il processo è WmiPrvse.exe o svchost.exe (hosting del servizio WMI Winmgmt) e identificare l'ID del processo.

Note

Potrebbe essere necessario aggiungere manualmente la colonna PID per visualizzare l'ID processo di tutti i processi in Gestione attività.

Ecco un esempio. Passare a Dettagli gestione>attività, quindi ordinare in base al nome e individuare il processo di WmiPrvse.exe che utilizza un utilizzo elevato della CPU. Prendere nota dell'ID processo (PID).

Questo screenshot mostra più istanze dell'host del provider WMI (il processo di WmiPrvse.exe) come attivo e il relativo utilizzo della CPU.

Screenshot che mostra il processo tramite Gestione attività.

Questo screenshot mostra l'host dei servizi: Strumentazione gestione Windows (svchost.exe che ospita il servizio Winmgmt) e il relativo utilizzo della CPU.

Screenshot che mostra i dettagli tramite Gestione attività.

Passare a Servizi gestione>attività, ordinare in base al nome e individuare il servizio Winmgmt. Prendere nota del PID. Fare clic con il pulsante destro del mouse sul servizio e selezionare Vai ai dettagli per individuare il processo di svchost.exe come indicato di seguito:

Screenshot che mostra i servizi tramite Gestione attività.

Nell'esempio, su tre istanze di WmiPrvse.exe , si trova PID 3648, che utilizza circa il 25% dell'utilizzo della CPU. Winmgmt è ospitato nel processo di svchost.exe con PID 2752.

Informazioni sull'utilizzo della CPU

Ciò comporta principalmente l'osservazione del consumo complessivo della CPU e il PID identificato. È importante notare quando, come e la frequenza del consumo della CPU.

Valutare la situazione comprendendo se l'utilizzo della CPU è elevato durante un periodo specifico. Controllare se sono presenti attività, ad esempio l'esecuzione di attività o servizi specifici attivi, l'esecuzione di applicazioni di monitoraggio o l'esecuzione di script che portano a WmiPrvse.exe o a Una CPU elevata di Winmgmt.

Comprendere se esiste un modello, il che significa che l'utilizzo della CPU è coerente, incoerente, casuale, sporadico o presenta picchi regolari.

Identificare la frequenza del consumo della CPU. Controllare se si verifica solo durante l'orario di produzione, l'orario di ufficio o un orario casuale del giorno. Può verificarsi anche durante un'attività specifica, ad esempio l'accesso o la disconnessa da parte dell'utente.

È possibile usare Gestione attività e prendere nota visivamente del modello di utilizzo della CPU.

Ecco un esempio che mostra come usare lo strumento Monitor prestazioni (Perfmon) per identificare le istanze esatte di WmiPrvse.exe con il PID identificato. È anche possibile ottenere una visualizzazione grafica dell'utilizzo della CPU di qualsiasi processo (WmiPrvse.exe o svchost.exe servizio WMI di hosting).

  1. Aprire un prompt dei comandi con privilegi elevati e immettere Perfmon.

  2. Selezionare Monitor prestazioni nel riquadro sinistro e selezionare il segno più (+) nel riquadro destro per aprire la finestra Aggiungi contatori.

  3. Espandere Processo e selezionare Processo ID. Selezionare tutte le istanze wmiPrvse# e quindi selezionare Aggiungi>OK.

    Screenshot che mostra come aggiungere contatori del processo ID.

    Screenshot che mostra i dettagli dei contatori ID Process.

  4. Nella finestra Aggiungi contatori espandere Processo e selezionare %Tempo processore. Selezionare WmiPrvse# corrispondente all'utilizzo elevato della CPU da parte del PID e quindi selezionare Aggiungi>OK.

    Screenshot che mostra come aggiungere %Processor Time counters.

    Screenshot che mostra i dettagli dei contatori %Tempo processore.

  5. Per il contatore "Processo ID", il valore Last, Average, Minimum e Maximum rappresentano tutti il PID del rispettivo processo di WmiPrvse.exe . Dopo aver identificato l'istanza esatta che utilizza un utilizzo elevato della CPU, è possibile rimuovere le istanze rimanenti delle istanze WmiPrvse# dall'elenco premendo Elimina.

Nell'esempio viene notato che WmiPrvse.exe PID 556 usava un utilizzo elevato della CPU ed è WmiPrvse#1 che corrisponde a PID 556 in Monitor prestazioni.

Viene quindi aggiunto il contatore %Tempo processore di WmiPrvse#1 per visualizzare una visualizzazione grafica in tempo reale dell'utilizzo della CPU di questo processo. Nell'esempio il colore %Tempo processore di WmiPrvse#1 viene modificato da giallo a rosso.

I passaggi sono gli stessi per individuare il svchost# corretto in Monitor prestazioni in caso di utilizzo elevato della CPU da parte di svchost.exe che ospita il servizio Wmimgmt.

Se si osserva che un processo di svchost.exe che ospita il servizio WMI causa un utilizzo elevato della CPU e sospetta che WMI stia contribuendo al problema, è possibile verificare se il PID del processo di svchost.exe ospita il servizio WMI eseguendo il comando seguente:

tasklist /svc /fi "Services eq Winmgmt"

Se il processo di svchost.exe contiene più servizi, è possibile suddividere il servizio WMI nel proprio processo di svchost.exe seguendo questa procedura:

  1. Aprire un prompt dei comandi con privilegi elevati.

  2. Esegui questo comando:

    sc config Winmgmt type= own
    
  3. Riavviare il servizio WMI.

Dopo il riavvio del servizio, è possibile eseguire il Tasklist /svc comando per verificare se il servizio Winmgmt è in esecuzione nel proprio processo di svchost.exe .

Dopo aver risolto il problema o non è più necessario che il servizio si trovi nel proprio processo di svchost.exe, è possibile reinseguirlo nel processo di svchost.exe condiviso. È possibile eseguire l'azione eseguendo il comando seguente da un prompt dei comandi e quindi riavviando nuovamente il servizio WMI:

sc config Winmgmt type= share

Diagnosticare WmiPrvse.exe

Finora, si ha solo il PID esatto di WmiPrvse.exe che utilizza un utilizzo elevato della CPU. Successivamente, raccogliere il maggior numero possibile di informazioni su questo PID. Ciò consente di valutare la situazione o identificare un elemento che potrebbe causare il problema. Raccogliere informazioni sull'utilizzo di altre risorse o identificare l'esatto provider WMI (DLL) ospitato dal WmiPrvse.exe PID identificato.

Altri utilizzi delle risorse, ad esempio memoria, handle, thread e nome utente

Raccogliere informazioni sull'utilizzo di altre risorse, ad esempio memoria, handle, thread e nome utente, al momento dell'utilizzo elevato della CPU. È possibile usare la scheda Dettagli in Gestione attività, selezionare il PID esatto ed esaminarlo.

Note

Aggiungere altre colonne in base alle esigenze.

Screenshot che mostra il servizio utilizzo elevato della CPU in Gestione attività.

Identificare il provider WMI (DLL) esatto ospitato dal WmiPrvse.exe PID identificato

Esistono più metodi per identificare i provider caricati nel processo di WmiPrvSE.exe .

  1. Usa script: elencare tutti i provider WMI in esecuzione per restituire tutti i provider wmi (Windows Management Instrumentation) in esecuzione.

  2. Esplora processi consente di identificare i provider esatti ospitati nel PID identificato. Seguire questa procedura:

    1. Eseguire Esplora processi come amministratore. Individuare il PID identificato WmiPrvse.exe , passare alle relative proprietà e selezionare la scheda Provider WMI.

    2. Nell'esempio seguente WmiPrvse.exe PID 556 si trova e si trova in hosting:

      • Provider WMI: MS_NT_EVENTLOG_PROVIDER
      • Spazio dei nomi: root\CIMV2
      • Percorso DLL: %systemroot%\system32\wbem\ntevt.dll

      Screenshot che mostra le proprietà WmiPrvSE.exe:556.

  3. Nella maggior parte dei casi, potrebbero essere caricati più provider. Può trattarsi di uno dei provider che trascorrono tempo nella CPU, causando problemi di CPU elevati.

In alcuni casi, se il problema è intermittente o poco frequente, la WmiPrvse.exe che causa il problema può essere terminata nel corso del tempo. Quando il problema si verifica di nuovo, può essere lo stesso provider in una nuova istanza di WmiPrvse.exe . In questa situazione, dopo aver annotato i provider, eseguire il cmdlet seguente per visualizzare il PID corrente del processo di WmiPrvse.exe contenente tale provider:

tasklist /m <Provider DLL>

Ecco un esempio:

tasklist /m ntevt.dll 

Screenshot che mostra l'output dell'elenco di attività del file ntevt.dll.

Di conseguenza, è importante comprendere quali provider vengono caricati nel processo di WmiPrvse.exe e prendere nota del PID del processo di WmiPrvse.exe ogni volta.

Dopo aver caricato i provider caricati nella WmiPrvse.exe che causano un utilizzo elevato della CPU, è possibile capire se gestisce qualsiasi attività.

Le attività possono essere le query WMI in ingresso inviate dal processo client al servizio WMI, che viene quindi assegnato al processo del provider WMI appropriato. Nell'esempio l'attività viene inviata al MS_NT_EVENTLOG_PROVIDER provider. Il passaggio successivo consiste quindi nello studiare le query e le attività in ingresso al MS_NT_EVENTLOG_PROVIDER provider.

Analizzare le query in ingresso

L'analisi delle query in ingresso implica:

  • Identificazione di query WMI gestite dai provider WMI che causano un utilizzo elevato della CPU.
  • Query WMI class(es).
  • Utente associato.
  • Processo client che avvia la query.

Le informazioni precedenti possono essere raccolte usando lo strumento disponibile pubblicamente WMIMon o i log operativi WMI-Activity e WMI-Tracing disponibili in Visualizzatore eventi.

Log operativi: Microsoft-Windows-WMI-Activity/Operational

Le query in ingresso vengono registrate come eventi operativi nel log Microsoft-Windows-WMI-Activity/Operational, disponibile in:

Visualizzatore eventi Applications and Services Logs>Microsoft>Windows>WMI-Activity>

Esistono diversi tipi di eventi registrati.

Se il processo WmiPrvse.exe che richiede un utilizzo elevato della CPU viene terminato di volta in volta e si sa già quali provider vengono caricati, l'evento seguente può aiutare a determinare il processo di WmiPrvse.exe attualmente attivo che ospita il provider in questione.

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

Abilitare "Log analitici e di debug" per abilitare la traccia WMI

In Visualizzatore eventi selezionare Visualizza>mostra log analitici e di debug per abilitare il debug e la traccia per WMI-Activity.

Screenshot che mostra Operational in Visualizzatore eventi.

Il debug e la traccia sono disabilitati per impostazione predefinita e ognuno di essi può essere abilitato manualmente facendo clic con il pulsante destro del mouse su Traccia o Debug e quindi scegliendo Abilita log.

Note

L'abilitazione di Mostra log analitici e di debug consente il debug e la traccia per quasi tutte le origini eventi e crea una registrazione aggiuntiva. Di conseguenza, questa operazione deve essere disabilitata una volta completata l'indagine e non sarà più in uso.

Questa traccia può essere mantenuta abilitata mentre si osserva un utilizzo elevato della CPU dal processo di WmiPrvse.exe o abbastanza a lungo per acquisire il comportamento di utilizzo elevato della CPU per mantenere i log puliti e moderatamente ridimensionati per semplificare l'analisi delle tracce.

  1. Esportare le tracce facendo clic con il pulsante destro del mouse su Traccia e scegliendo Salva tutti gli eventi con nome....

  2. Selezionare .xml o .csv in Salva con nome.

    Note

    È possibile scegliere altri formati familiari, ad esempio in .EVTX base alle esigenze.

  3. Scegliere la lingua desiderata del file di traccia.

  4. È possibile scegliere di salvare gli eventi operativi WMI-Activity separatamente, nel formato desiderato da esaminare e analizzare.

Esaminare i file di traccia WMI

All'interno della traccia WMI sono incluse più operazioni importanti, che fanno parte di query WMI in ingresso. Le operazioni sono documentate nell'interfaccia IWbemServices (wbemcli.h).

Alcune delle operazioni importanti sono:

  • IWbemServices::ExecQuery metodo (wbemcli.h)
  • IWbemServices::ExecMethod metodo (wbemcli.h)
  • IWbemServices::ExecQueryAsync metodo (wbemcli.h)

Ecco una delle voci di log del file CSV di traccia WMI salvata:

Livello Data e ora Origine ID evento Categoria attività Descrizione
Informazioni 05-05-23 14:48 Microsoft-Windows-WMI-Activity 11 None CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30693; OperationId = 30694; Operazione = Avvia IWbemServices::ExecQuery - root\cimv2: select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520

Un evento simile in formato XML è simile al seguente:

 <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> 

Dall'output dell'operazione di esempio precedente è possibile ottenere e comprendere le informazioni seguenti:

  • È stata avviata una query: 2023-05-05 alle 13:09:18
  • Sul computer: 21H2W10M,
  • Da un PID client: 5484
  • ID operazione: 28089
  • Query: select * from Win32_Product
  • Spazio dei nomi: \\.\root\cimv2
  • Operazione: IWbemServices::ExecQuery

Ecco un altro log:

Livello Data e ora Origine ID evento Categoria attività Descrizione
Informazioni 05-05-23 14:47 Microsoft-Windows-WMI-Activity 12 None ProviderInfo per GroupOperationId = 30641; Operazione = 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

Lo stesso evento in formato XML:

<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> 

Dall'output dell'operazione del secondo esempio è possibile ottenere e comprendere le informazioni seguenti:

  • L'operazione CreateInstanceEnum viene avviata per conto dell'utente con SID: UserID="S-1-5-21-000000000000-0000000000-0000000-1103"
  • Il 2023-05-05 alle 13:09
  • Operazione esatta: Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent
  • ID host: 556
  • Nome provider: MS_NT_EVENTLOG_PROVIDER
  • Percorso provider: %systemroot%\system32\wbem\ntevt.dll

Trovare i PID client che causano un utilizzo elevato della CPU

L'idea di esaminare questo file di log consiste nell'elencare le operazioni associate al PID identificato WmiPrvse.exe che utilizza un utilizzo elevato della CPU, comprendere le query in ingresso e chi li sta avviando (processo client).

Nell'esempio precedente, si tratta del PID 552 che causa un utilizzo elevato della CPU.

Dal secondo esempio dell'output del log, l'operazione CreateInstanceEnum viene avviata per una classe Win32_NTLogEventWMI specifica.

Per altre informazioni, vedere Win32_NTLogEvent, che include i dettagli del provider WMI associati alla classe WMI.

Si conosce ora il provider WMI esatto ospitato (MS_NT_EVENTLOG_PROVIDER) nella WmiPrvse.exe che causa un utilizzo elevato della CPU, l'ID host (552) e la classe WMI (Win32_NTLogEvent) su cui viene eseguita una query da parte di un processo client.

A seconda dello strumento usato per esaminare i file di traccia, è possibile applicare filtri necessari per esaminare solo le operazioni correlate o Win32_NTLogEvent WmiPrvse.exe PID 552 o ID host 552 o host 552 o ntevt.dll.

Con il filtro che mostra solo le righe o le operazioni che includono "Win32_NTLogEvent", i risultati sono:

Livello Origine ID evento Descrizione
Informazioni 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
Informazioni Microsoft-Windows-WMI-Activity 12 ProviderInfo per GroupOperationId = 30641; Operazione = 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
Informazioni 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
Informazioni Microsoft-Windows-WMI-Activity 12 ProviderInfo per GroupOperationId = 30697; Operazione = 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

Dalle operazioni precedenti è possibile ottenere le informazioni aggiuntive seguenti:

  • Timestamp:
  • ID operazione: 30642;
  • Operazione esatta = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent;
  • Computer client = 21H2W10M
  • User = CONTOSO\<UserName>
  • PID del client che ha avviato la query: 5484

Infine, si dispone del PID di un processo client 5484, che avvia una query a Win32_NTLogEvent. Gestito dal provider MS_NT_EVENTLOG_PROVIDER e ospitato in WmiPrvse.exe PID 552, che causa un utilizzo elevato della CPU.

Dopo aver ristretto i PID client, usare uno degli strumenti seguenti per trovare il nome del processo.

Altre informazioni su WmiMon

WMImon.exe è un potente strumento di monitoraggio che consente il rilevamento e il monitoraggio degli eventi di sistema e l'utilizzo delle risorse del servizio WMI.

Serve la funzione importante di identificare le chiamate e le query WMI effettuate da altri processi, nonché di fornire informazioni sulla frequenza delle query, sull'account utente usato per le query e sulle informazioni richieste.

Questi dati possono essere utili per gli amministratori di sistema che devono risolvere i problemi di prestazioni.

Per raccogliere e analizzare questi dati, è possibile seguire le istruzioni dettagliate:

  1. Identificare il PID del WmiPrvSE.exe che utilizza l'utilizzo della CPU usando i metodi descritti in precedenza.
  2. Scaricare lo strumento WMIMon.exe da GitHub - luctalpe/WMIMon. Lo strumento consiste nel monitorare l'attività WMI in Windows.
  3. Estrarre il contenuto del file WMIMon_Binaries.zip in una cartella del computer.
  4. Aprire un prompt dei comandi come amministratore e passare alla cartella in cui sono stati estratti i file WMIMon.
  5. Eseguire il file WMIMon.exe immettendo WMIMon.exe nel prompt dei comandi e premendo INVIO.
  6. WMIMon inizierà ora a monitorare le chiamate WMI effettuate dai processi nel sistema, incluso quello identificato nel passaggio 1.
  7. WMIMon visualizza informazioni quali l'ID processo client, lo spazio dei nomi WMI chiamato dall'operazione, il nome della classe WMI e l'account utente usato per effettuare la richiesta.
  8. Analizzare l'output di WMIMon per identificare il processo che sta effettuando frequenti chiamate WMI e causare potenzialmente un utilizzo elevato della CPU.

Seguendo questa procedura, è possibile usare in modo efficace WMIMon.exe per monitorare l'attività WMI nel sistema e identificare eventuali problemi di prestazioni o sicurezza causati da un utilizzo eccessivo di WMI.

Ecco un esempio:

Screenshot che mostra i dati acquisiti da WMIMon.

Note

È possibile esportare i dati acquisiti da WMIMon in un file di testo eseguendo il WMIMon.exe > Data.txt comando nel prompt dei comandi. Per arrestare l'acquisizione dei dati, premere CTRL + C.

Possono verificarsi situazioni difficili in cui limitare un PID client specifico, un'applicazione o un file EXE è impossibile. In questi casi, considerare un'entità comune, ad esempio un nome utente o un computer associato, può essere utile.

Ovvero, comprendere se l'utente che avvia la query è un account del servizio o associato a un'applicazione specifica.

Altre soluzioni

Dopo aver finalizzato il sospetto, è possibile disabilitare temporaneamente il servizio o disinstallare l'applicazione associata e verificare se il problema di utilizzo elevato della CPU viene risolto.

Ecco alcuni scenari in cui la disabilitazione può convalidare le osservazioni.

  • Monitoraggio di applicazioni e servizi
  • System Center Configuration Manager (SCCM) (policyhost.exe o Monitoringhost.exe)
  • Powershell.exe l'esecuzione di script contenenti query WMI
  • Qualsiasi applicazione di terze parti

Raccolta dei dati

Se è necessaria l'assistenza del supporto tecnico Microsoft, si consiglia di raccogliere le informazioni seguendo i passaggi indicati in Raccogliere informazioni utilizzando il TSS per i problemi relativi all'esperienza utente.

  1. Scaricare TSS.zip ed estrarre il contenuto.

  2. Avviare la traccia eseguendo il cmdlet seguente da un prompt dei comandi di PowerShell con privilegi elevati. Mantenere la traccia in esecuzione quando il computer riscontra un problema elevato della CPU o riproduce il problema.

    .\TSS.ps1 -UEX_WMIBase -WIN_Kernel -ETWflags 1 -WPR CPU -Perfmon UEX_WMIPrvSE -PerfIntervalSec 1 -noBasicLog
    

    Note

    Mantenere la traccia in esecuzione per più di due minuti. Assicurarsi che il problema venga riprodotto durante questa finestra.

  3. Arrestare la traccia seguendo le istruzioni nel prompt dei comandi di PowerShell in base al set di strumenti TSS.

Lo script creerà un file ZIP contenente i risultati di tutte le tracce e le informazioni di diagnostica. Dopo aver creato un caso di supporto, questo file può essere caricato nell'area di lavoro sicura per l'analisi.