- 11/16/2020
- 3 minutos para ler
-
- D
- v
Este artigo fornece uma alternativa para a questão do alto uso de CPU pelo WmiPrvSE.exe em intervalos regulares.
Versão do produto original: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – todas as edições
Número do KB original: 4483874
Symptoms
Quando você usa um computador baseado em Windows, você nota que o Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) está usando alta capacidade de CPU (perto de 100%) por vários minutos a cada 15 a 20 minutos.
Quando o problema ocorrer, use o Task Manager para identificar o identificador de processo (PID) do processo WmiPrvSE.exe que está consumindo alta CPU. Em seguida, abra um prompt de comando elevado e execute o seguinte comando:
tasklist /m wmiperfclass.dll
A lista de processos WmiPrvSE.exe que tem este módulo carregado será exibida. Normalmente apenas um processo é listado. No entanto, se você tiver ambos clientes de 32 bits e 64 bits, você pode ver dois processos. Este é um exemplo de saída:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Se o PID do processo listado corresponder ao que você encontrou no Task Manager, é provável que você esteja encontrando o problema descrito neste artigo.
Causa
Este problema pode ser causado por um dos seguintes fatores.
Um ou mais processos estão usando um alto número de handles
Todos os handles são armazenados na estrutura do kernel \BaseNamedObjects. O provedor da WMIPerfClass deve scanear esta estrutura ao criar a classe de desempenho que está relacionada com os objetos Job.
Se esta estrutura estiver inchada por causa do alto número de handles, a operação terá alto uso de CPU e levará mais tempo do que o normal.
É de se esperar um impacto para esta condição quando um processo estiver usando mais de cerca de 30.000 alças, ou o número total de alças no sistema exceder 50.000.
Uma atualização que é lançada em março de 2020 para versões de sistemas operacionais suportados inclui alguma otimização de desempenho e aborda algumas variantes deste problema. Consulte o histórico de Atualizações do Windows para obter mais informações sobre a atualização que se aplica à sua versão do Windows.
Um ou mais processos em execução no sistema estão usando muita memória
Isso afeta a criação das classes de desempenho do processo, pois a área de memória de cada processo em execução terá de ser consultada. A memória utilizada pelo processo pode ser fragmentada, o que torna a operação mais consumidora de recursos. Isto acontece porque o WMIPerfClass também está a consultar contadores de desempenho “Costly”.
Pode verificar se os contadores de desempenho Costly estão activados executando o seguinte comando PowerShell:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Se o comando retornar resultados, isto indica os contadores de desempenho Costly que estão activados. Por exemplo:
Win32_PerfFormattedData_PerfProc_FullImage_Costly
Win32_PerfRawData_PerfProc_FullImage_Costly
Win32_PerfFormattedData_PerfProc_Image_Costly
Win32_PerfRawData_PerfProc_Image_Costly
Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly
Win32_PerfRawData_PerfProc_ThreadDetails_Costly
Redução do trabalho
Para resolver o problema, identificar o processo que está usando um grande número de alças ou uma grande quantidade de memória.O processo pode ter um vazamento de memória ou um problema de vazamento de manivela. Como alternativa, reinicie o processo.
Por padrão se você estiver usando o Windows Server 2016 ou uma versão posterior do Windows, os contadores de desempenho Costly são desativados a partir das seguintes atualizações cumulativas:
- Windows Server 2016 / Windows 10 versão 1607 (RS1)
18 de outubro de 2018-KB4462928 (OS Build 14393.2580) - Janelas 10 versão 1703 (RS2)
24 de julho de 2018-KB4338827 (OS Build 15063.1235) - Janelas 10 versão 1709 (RS3)
24 de julho de 2018-KB4338817 (OS Build 16299.579) - Windows 10 versão 1803 (RS4)
Julho 16, 2018-KB4345421 (OS Build 17134.167)
Nota
Após a atualização cumulativa ser instalada, se você precisar das classes que estão relacionadas aos contadores de desempenho Costly, defina o valor Enable Costly Providers para 1 (DWORD) na seguinte subchave de registro para torná-los disponíveis novamente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
A atualização cumulativa não afetará o comportamento quando um processo estiver usando um grande número de alças.
Esta questão acontece quando um cliente está a consultar as classes de desempenho. Esta é normalmente uma aplicação de monitoramento.
Como alternativa, você também pode desativar a aplicação de monitoramento para evitar a criação das classes de desempenho.
Mais informações
WMI fornece várias classes de desempenho. Para obter mais informações, consulte Classes de contador de desempenho.
Essas classes são criadas dinamicamente com base nos contadores de desempenho disponíveis no sistema. Todas as classes são criadas ao mesmo tempo, não apenas as classes que estão sendo consultadas.
WMIPerfClass é o módulo que trata da criação dessas classes quando o cliente WMI consulta qualquer uma delas ou enumera as classes disponíveis.
Essas classes de desempenho são armazenadas em um cache que é invalidado após 15 a 20 minutos. Assim que o cache é invalidado, as classes de desempenho devem ser criadas novamente se um cliente as solicitar.
Criar as classes de desempenho significa que o módulo WMIPerfClass.dll terá que ser carregado dentro de um processo WmiPrvSE.exe e o código relacionado executado.