Compartilhar via


Solucionar problemas de alto uso da CPU do WMI

Este artigo aborda como diagnosticar problemas de alto uso da CPU do WMI (Instrumentação de Gerenciamento do Windows) em qualquer sistema operacional Windows.

Identificar o problema

Na maioria dos cenários, a CPU é consumida pelo processo WmiPrvse.exe e há alguns casos em que svchost.exe que hospedam o serviço WMI (Winmgmt) estão consumindo alto uso da CPU.

Revise o painel Processos ou Detalhes do Gerenciador de Tarefas para identificar o processo exato

Identifique se o processo é WmiPrvse.exe ou svchost.exe (hospedando o serviço WMI Winmgmt) e identifique a ID do processo.

Observação

Talvez seja necessário adicionar manualmente a coluna PID para exibir a ID do processo de todos os processos no Gerenciador de Tarefas.

Veja um exemplo. Vá para Detalhes do Gerenciador>de Tarefas, classifique por Nome e localize o processo WmiPrvse.exe que está consumindo alto uso da CPU. Anote o ID do processo (PID).

Esta captura de tela mostra várias instâncias do Host do Provedor WMI (o processo WmiPrvse.exe) como ativas e sua utilização da CPU.

A captura de tela mostra o processo por meio do gerenciador de tarefas.

Esta captura de tela mostra o Host de Serviços: Instrumentação de Gerenciamento do Windows (svchost.exe hospedando o serviço Winmgmt) e sua utilização da CPU.

A captura de tela mostra os detalhes por meio do gerenciador de tarefas.

Vá para Serviços do Gerenciador>de Tarefas, classifique por Nome e localize o serviço Winmgmt. Anote o PID. Clique com o botão direito do mouse no serviço e selecione Ir para detalhes para localizar o processo svchost.exe da seguinte maneira:

A captura de tela mostra os serviços por meio do gerenciador de tarefas.

No exemplo, de três instâncias WmiPrvse.exe , o PID 3648 está localizado, o que consome cerca de 25% do uso da CPU. O Winmgmt é hospedado no processo svchost.exe com PID 2752.

Entenda o consumo da CPU

Isso envolve principalmente observar o consumo geral da CPU e o PID identificado. É importante observar quando, como e a frequência do consumo da CPU.

Avalie a situação entendendo se o consumo da CPU é alto durante um período específico. Verifique se há alguma atividade, como executar tarefas ou serviços específicos ativos, executar aplicativos de monitoramento ou executar scripts que levam a WmiPrvse.exe ou Winmgmt alta CPU.

Entenda se há algum padrão, o que significa que o uso da CPU é consistente, inconsistente, aleatório, esporádico ou tem picos regulares.

Identifique a frequência do consumo da CPU. Verifique se ocorre apenas durante o horário de produção, fora do horário comercial ou em um horário aleatório do dia. Também pode ocorrer durante uma atividade específica, como entrada ou saída do usuário.

Você pode usar o Gerenciador de Tarefas e anotar visualmente como é o padrão de uso da CPU.

Aqui está um exemplo que mostra como usar a ferramenta Monitor de Desempenho (Perfmon) para identificar as instâncias exatas do WmiPrvse.exe com o PID identificado. Você também pode obter uma exibição gráfica do consumo de CPU de qualquer processo (WmiPrvse.exe ou svchost.exe que hospeda o serviço WMI).

  1. Abra um prompt de comando com privilégios elevados e insira Perfmon.

  2. Selecione Monitor de Desempenho no painel esquerdo e selecione o sinal de adição (+) no painel direito para abrir a janela Adicionar Contadores .

  3. Expanda Processo e selecione Processo de ID. Selecione todas as instâncias WmiPrvse# e, em seguida, selecione Adicionar>OK.

    A captura de tela mostra como adicionar contadores de processo de ID.

    A captura de tela mostra os detalhes dos contadores do processo de ID.

  4. Na janela Adicionar Contadores, expanda Processo e selecione %Tempo do Processador. Selecione o WmiPrvse# correspondente ao PID que consome alto uso da CPU e, em seguida, selecione Adicionar>OK.

    A captura de tela mostra como adicionar contadores de %Tempo do Processador.

    A captura de tela mostra os detalhes dos contadores %Tempo do Processador.

  5. Para o contador "Processo de ID", o Último, a Média, o Mínimo e o Máximo representam o PID do respectivo processo WmiPrvse.exe. Depois de identificar a instância exata que está consumindo alto uso da CPU, você pode remover as instâncias restantes de instâncias WmiPrvse# da lista pressionando Excluir.

No exemplo, observa-se que WmiPrvse.exe PID 556 estava consumindo alto uso da CPU e é WmiPrvse#1 que corresponde ao PID 556 no Monitor de Desempenho.

Em seguida, o contador %Tempo do Processador de WmiPrvse#1 é adicionado para ver uma exibição gráfica ao vivo do uso da CPU desse processo. No exemplo, a cor %Tempo do Processador de WmiPrvse#1 é alterada de amarelo para vermelho.

As etapas são as mesmas para localizar o svchost# correto no Monitor de Desempenho no caso de alto uso da CPU por svchost.exe hospedando o serviço Mmimgmt.

Se você observar que um processo svchost.exe que hospeda o serviço WMI está causando alto uso da CPU e suspeitar que o WMI está contribuindo para o problema, poderá confirmar se o PID do processo svchost.exe está hospedando o serviço WMI executando o seguinte comando:

tasklist /svc /fi "Services eq Winmgmt"

Se o processo svchost.exe contiver vários serviços, você poderá dividir o serviço WMI em seu próprio processo svchost.exe seguindo estas etapas:

  1. Abra um prompt de comando com privilégios elevados.

  2. Execute o comando a seguir:

    sc config Winmgmt type= own
    
  3. Reinicie o serviço WMI.

Depois de reiniciar o serviço, você pode executar o Tasklist /svc comando para verificar se o serviço Winmgmt está sendo executado em seu próprio processo svchost.exe .

Depois de resolver o problema ou não exigir mais que o serviço esteja em seu próprio processo svchost.exe, você pode colocá-lo de volta no processo de svchost.exe compartilhado. Você pode executar a ação executando o seguinte comando em um prompt de comando e reiniciando o serviço WMI novamente:

sc config Winmgmt type= share

Diagnosticar WmiPrvse.exe

Até agora, você só tem o PID exato de WmiPrvse.exe que está consumindo alto uso da CPU. Em seguida, reúna o máximo de informações possível sobre esse PID. Isso ajuda você a avaliar a situação ou identificar algo que pode estar causando o problema. Reúna informações sobre o uso de outros recursos ou identifique o provedor WMI (DLL) exato hospedado pelo WmiPrvse.exe PID identificado.

Outro uso de recursos, como memória, identificadores, threads e nome de usuário

Reúna informações sobre o uso de outros recursos, como memória, identificadores, threads e nome de usuário, no momento do alto uso da CPU. Você pode usar a guia Detalhes no Gerenciador de Tarefas, selecionar o PID exato e revisá-lo.

Observação

Adicione colunas adicionais conforme necessário.

A captura de tela mostra o serviço de alto uso da CPU no Gerenciador de Tarefas.

Identificar o provedor WMI (DLL) exato hospedado pelo WmiPrvse.exe PID identificado

Existem vários métodos para identificar o(s) provedor(es) carregado(s) no processo WmiPrvSE.exe .

  1. Usar scripts: liste todos os provedores WMI em execução para gerar todos os provedores WMI (Instrumentação de Gerenciamento do Windows) em execução.

  2. O Process Explorer pode ajudá-lo a identificar os provedores exatos hospedados no PID identificado. Siga estas etapas:

    1. Execute o Process Explorer como administrador. Localize o PID WmiPrvse.exe identificado, vá para suas propriedades e selecione a guia Provedores WMI.

    2. No exemplo a seguir, WmiPrvse.exe PID 556 está localizado e está hospedado:

      • Provedor WMI: MS_NT_EVENTLOG_PROVIDER
      • Namespace: root\CIMV2
      • Caminho da DLL: %systemroot%\system32\wbem\ntevt.dll

      A captura de tela mostra as propriedades WmiPrvSE.exe:556.

  3. Na maioria dos casos, pode haver mais de um provedor carregado. Pode ser qualquer um dos provedores que está gastando tempo na CPU, causando problemas de alta CPU.

Às vezes, se o problema for intermitente ou pouco frequente, o WmiPrvse.exe que está causando o problema pode ser encerrado com o tempo. Quando o problema ocorrer novamente, pode ser o(s) mesmo(s) provedor(es) em uma nova instância WmiPrvse.exe . Nessa situação, depois de anotar os provedores, execute o seguinte cmdlet para mostrar o PID atual do processo WmiPrvse.exe que contém esse provedor:

tasklist /m <Provider DLL>

Veja um exemplo:

tasklist /m ntevt.dll 

A captura de tela mostra a saída da lista de tarefas do arquivo ntevt.dll.

Portanto, é importante entender quais provedores são carregados no processo de WmiPrvse.exe e anotar o PID do processo de WmiPrvse.exe todas as vezes.

Depois de ter os provedores carregados no WmiPrvse.exe causando alto uso da CPU, você pode entender se ele está lidando com alguma tarefa.

As tarefas podem ser as consultas WMI de entrada enviadas pelo processo do cliente para o serviço WMI, que é atribuído ao processo do provedor WMI apropriado. No exemplo, a tarefa é enviada ao MS_NT_EVENTLOG_PROVIDER provedor. Portanto, a próxima etapa será estudar as consultas e tarefas recebidas para o MS_NT_EVENTLOG_PROVIDER provedor.

Analisar as consultas recebidas

O exame de consultas recebidas envolve:

  • Identificar consultas WMI tratadas por provedores WMI que causam alto uso da CPU.
  • Consultas de classe(s) WMI.
  • Um usuário associado.
  • Um processo de cliente que está iniciando a consulta.

As informações acima podem ser coletadas usando a ferramenta WMIMon ou WMI-Activity Operational logs disponíveis publicamente e WMI-Tracing disponível em Visualizador de Eventos.

Logs operacionais: Microsoft-Windows-WMI-Activity/Operational

As consultas de entrada são registradas como eventos operacionais no log Microsoft-Windows-WMI-Activity/Operacional, que está disponível em:

Logs de aplicativos e serviços do Visualizador>de Eventos Atividade>WMI do Microsoft Windows>>

Existem vários tipos de eventos registrados.

Se o processo WmiPrvse.exe que consome alta CPU for encerrado de tempos em tempos e você já souber quais provedores estão carregados, o evento a seguir poderá ajudar a determinar o processo de WmiPrvse.exe ativo no momento que hospeda o provedor em questão.

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

Habilite "Logs analíticos e de depuração" para habilitar o rastreamento WMI

No Visualizador de Eventos, selecione Exibir>Mostrar Logs Analíticos e de Depuração para habilitar a Depuração e o Rastreamento para Atividade WMI.

A captura de tela mostra Operacional no Visualizador de Eventos.

Depurar e Rastrear são desabilitados por padrão, e cada um deles pode ser habilitado manualmente clicando com o botão direito do mouse em Rastrear ou Depurar e selecionando Habilitar Log.

Observação

Habilitar Mostrar Logs Analíticos e de Depuração permite a depuração e o rastreamento para quase todas as fontes de eventos e cria um registro adicional. Portanto, isso deve ser desativado assim que a investigação for concluída e não estará mais em uso.

Esse rastreamento pode ser mantido habilitado enquanto você observa o alto consumo de CPU pelo processo WmiPrvse.exe ou por tempo suficiente para capturar o comportamento de alto uso da CPU para manter os logs limpos e de tamanho moderado para facilitar a análise de rastreamentos.

  1. Exporte os rastreamentos clicando com o botão direito do mouse em Rastrear e selecionando Salvar todos os eventos como....

  2. Selecione .xml ou .csv em Salvar como tipo.

    Observação

    Você pode escolher outros formatos familiares, conforme .EVTX necessário.

  3. Escolha o idioma desejado do arquivo de rastreamento.

  4. Você também pode optar por salvar os eventos operacionais da atividade WMI separadamente, no formato desejado para revisão e análise.

Examinar os arquivos de rastreamento WMI

No rastreamento WMI, há várias operações importantes incluídas, que fazem parte das consultas WMI de entrada. As operações são documentadas na interface IWbemServices (wbemcli.h).

Algumas das operações importantes são:

  • IWbemServices::ExecQuery método (wbemcli.h)
  • IWbemServices::ExecMethod método (wbemcli.h)
  • IWbemServices::ExecQueryAsync método (wbemcli.h)

Aqui está uma das entradas de log do arquivo CSV de rastreamento WMI salvas:

Nível Data e hora Fonte ID do evento Categoria da tarefa Descrição
Informações 05-05-23 14:48 Atividade Microsoft-Windows-WMI 11 Nenhum CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30693; OperationId = 30694; Operação = Iniciar IWbemServices::ExecQuery - root\cimv2 : select * a partir de Win32_Product; Máquina Cliente = 21H2W10M; Usuário = CONTOSO\<UserName>; ClientProcessId = 5484; Nome do Namespace = 133277000000783520

Um evento semelhante no formato XML se parece com:

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

A partir da saída da operação de exemplo acima, você pode obter e entender as seguintes informações:

  • Uma consulta foi iniciada em: 2023-05-05 às 13:09:18
  • Na máquina: 21H2W10M,
  • De um cliente PID: 5484
  • ID da operação: 28089
  • Consulta: select * from Win32_Product
  • Namespace: \\.\root\cimv2
  • Operação: IWbemServices::ExecQuery

Aqui está outro registro:

Nível Data e hora Fonte ID do evento Categoria da tarefa Descrição
Informações 05-05-23 14:47 Atividade Microsoft-Windows-WMI 12 Nenhum ProviderInfo para GroupOperationId = 30641; Operação = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; ID do host = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Caminho = %systemroot%\system32\wbem\ntevt.dll

O mesmo evento no 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> 

A partir da saída da operação do segundo exemplo, você pode obter e entender as seguintes informações:

  • A operação CreateInstanceEnum é iniciada em nome do usuário com SID: UserID="S-1-5-21-00000000000-000000000-00000000-1103"
  • Em 05/05/2023 às 13:09
  • Operação exata: Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent
  • ID do Anfitrião: 556
  • Nome do provedor: MS_NT_EVENTLOG_PROVIDER
  • Caminho do provedor: %systemroot%\system32\wbem\ntevt.dll

Encontre os PIDs do cliente que causam alto uso da CPU

A ideia de revisar esse arquivo de log é listar as operações associadas ao PID WmiPrvse.exe identificado que está consumindo alto uso da CPU, entender as consultas de entrada e quem as está iniciando (o processo do cliente).

No exemplo abordado acima, é o PID 552 que está causando alto uso da CPU.

No segundo exemplo da saída de log, a operação CreateInstanceEnum é iniciada para uma classe Win32_NTLogEventWMI específica.

Para obter mais informações, consulte Win32_NTLogEvent, que inclui os detalhes do provedor WMI associados à classe WMI.

Agora você sabe o provedor WMI exato hospedado (MS_NT_EVENTLOG_PROVIDER) no WmiPrvse.exe que está causando alto uso da CPU, a ID do host (552) e a classe WMI (Win32_NTLogEvent) que está sendo consultada por algum processo de cliente.

Dependendo da ferramenta que você está usando para revisar os arquivos de rastreamento, você pode aplicar os filtros necessários para revisar apenas as operações relacionadas ou Win32_NTLogEvent WmiPrvse.exe PID 552 ou ID de host 552 ou ntevt.dll.

Com o filtro mostrando apenas as linhas ou operações que incluem "Win32_NTLogEvent", os resultados são:

Nível Origem ID do evento Descrição
Informações Atividade Microsoft-Windows-WMI 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30641; OperationId = 30642; Operação = Iniciar IWbemServices::CreateInstanceEnum - raiz\cimv2 : Win32_NTLogEvent; Máquina Cliente = 21H2W10M; Usuário = CONTOSO\<UserName>; ClientProcessId = 5484; Nome do Namespace = 133277000000783520
Informações Atividade Microsoft-Windows-WMI 12 ProviderInfo para GroupOperationId = 30641; Operação = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; ID do host = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Caminho = %systemroot%\system32\wbem\ntevt.dll
Informações Atividade Microsoft-Windows-WMI 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901}; GroupOperationId = 30697; OperationId = 30698; Operação = Iniciar IWbemServices::CreateInstanceEnum - raiz\cimv2 : Win32_NTLogEvent; Máquina Cliente = 21H2W10M; Usuário = CONTOSO\<UserName>; ClientProcessId = 5484; Nome do Namespace = 133277000000783520
Informações Atividade Microsoft-Windows-WMI 12 ProviderInfo para GroupOperationId = 30697; Operação = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; ID do host = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Caminho = %systemroot%\system32\wbem\ntevt.dll

A partir das operações acima, você pode obter as seguintes informações adicionais:

  • Timestamp
  • ID da operação: 30642;
  • A operação exata = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent;
  • Máquina cliente = 21H2W10M
  • Usuário = CONTOSO\<UserName>
  • PID do cliente que iniciou a consulta: 5484

Por fim, você tem o PID de um processo de cliente 5484, que está iniciando uma consulta para Win32_NTLogEvent. Isso é tratado pelo provedor MS_NT_EVENTLOG_PROVIDER e hospedado sob WmiPrvse.exe PID 552, o que causa alto uso da CPU.

Depois de restringir os PIDs do cliente, use uma das ferramentas a seguir para encontrar o nome do processo.

Mais informações sobre o WmiMon

WMImon.exe é uma poderosa ferramenta de monitoramento que permite o rastreamento e o monitoramento de eventos do sistema e o uso de recursos do serviço WMI.

Ele tem a importante função de identificar as chamadas e consultas WMI feitas por outros processos, além de fornecer informações sobre a frequência de consulta, a conta de usuário usada para as consultas e as informações solicitadas.

Esses dados podem ser úteis para administradores de sistema que precisam solucionar problemas de desempenho.

Para coletar e analisar esses dados, você pode seguir as instruções passo a passo:

  1. Identifique o PID do WmiPrvSE.exe que está consumindo o uso da CPU usando os métodos descritos acima.
  2. Baixe a ferramenta WMIMon.exe do GitHub - luctalpe/WMIMon. A ferramenta é monitorar a atividade do WMI no Windows.
  3. Extraia o conteúdo do arquivo WMIMon_Binaries.zip para uma pasta em seu computador.
  4. Abra um prompt de comando como administrador e vá para a pasta onde você extraiu os arquivos WMIMon.
  5. Execute o arquivo WMIMon.exe digitando WMIMon.exe no prompt de comando e pressionando Enter.
  6. O WMIMon agora começará a monitorar as chamadas WMI feitas por processos no sistema, incluindo o identificado na etapa 1.
  7. O WMIMon exibe informações como a ID do processo do cliente, o namespace WMI chamado pela operação, o nome da classe WMI e a conta de usuário usada para fazer a solicitação.
  8. Analise a saída do WMIMon para identificar quais processos estão fazendo chamadas WMI frequentes e potencialmente causando alto uso da CPU.

Seguindo estas etapas, você pode usar efetivamente o WMIMon.exe para monitorar a atividade do WMI em seu sistema e identificar quaisquer problemas de desempenho ou segurança causados pelo uso excessivo do WMI.

Veja um exemplo:

A captura de tela mostra os dados capturados pelo WMIMon.

Observação

Você pode exportar os dados capturados pelo WMIMon para um arquivo de texto executando o WMIMon.exe > Data.txt comando no prompt de comando. Para interromper a captura de dados, pressione Ctrl + C.

Pode haver situações complicadas em que é impossível restringir um PID, aplicativo ou EXE de cliente específico. Nesses casos, considerar uma entidade comum, como um nome de usuário ou máquina associada, pode ser útil.

Ou seja, entenda se o usuário que inicia a consulta é uma conta de serviço ou associado a um aplicativo específico.

Outras soluções

Depois de finalizar o suspeito, você pode considerar desabilitar temporariamente seu serviço ou desinstalar o aplicativo associado a ele e verificar se o problema de alto uso da CPU foi resolvido.

Aqui estão alguns cenários em que desativá-lo pode validar suas observações.

  • Monitoramento de aplicativos e serviços
  • Gerenciador de configuração do System Center (SCCM) (policyhost.exe ou Monitoringhost.exe)
  • Powershell.exe executando scripts contendo consultas WMI
  • Qualquer aplicativo de terceiros

Coleta de dados

Se você precisar de ajuda do suporte da Microsoft, recomendamos coletar as informações seguindo as etapas mencionadas em Coletar informações usando o TSS para problemas relacionados à Experiência do Usuário.

  1. Baixe TSS.zip e extraia o conteúdo.

  2. Inicie o rastreamento executando o cmdlet a seguir em um prompt de comando do PowerShell com privilégios elevados. Mantenha o rastreamento em execução quando a máquina estiver enfrentando um problema de CPU alta ou reproduzindo o problema.

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

    Observação

    Mantenha o rastreamento em execução por mais de dois minutos. Certifique-se de que o problema seja reproduzido durante essa janela.

  3. Pare o rastreamento seguindo as instruções no prompt de comando do PowerShell de acordo com o conjunto de ferramentas TSS.

O script criará um arquivo zip contendo os resultados de todos os rastreamentos e as informações de diagnóstico. Depois que um caso de suporte é criado, esse arquivo pode ser carregado no espaço de trabalho seguro para análise.