- 11/16/2020
- 3 minutos para leer
-
- D
- v
Este artículo proporciona una solución para el problema del alto uso de la CPU por el proceso WmiPrvSE.exe a intervalos regulares.
Versión original del producto: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – todas las ediciones
Número de KB original: 4483874
Síntomas
Cuando utiliza un equipo basado en Windows, nota que el host proveedor de instrumentación de administración de Windows (WMI) (WmiPrvSE.exe) está utilizando una alta capacidad de CPU (cerca del 100 por ciento) durante varios minutos cada 15 o 20 minutos.
Cuando se produce el problema, utilice el Administrador de tareas para identificar el identificador de proceso (PID) del proceso WmiPrvSE.exe que está consumiendo mucha CPU. A continuación, abra un símbolo del sistema elevado y ejecute el siguiente comando:
tasklist /m wmiperfclass.dll
Se mostrará la lista de procesos WmiPrvSE.exe que tienen cargado este módulo. Normalmente sólo aparece un proceso en la lista. Sin embargo, si tiene clientes de 32 y 64 bits, puede ver dos procesos. Este es un ejemplo de salida:
Nombre de la imagen PID Módulos
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Si el PID del proceso listado coincide con el que encontró en el Administrador de Tareas, es probable que esté encontrando el problema que se describe en este artículo.
Causa
Este problema puede ser causado por cualquiera de los siguientes factores.
Uno o más procesos están utilizando un alto número de handles
Todos los handles se almacenan en la estructura del núcleo \BaseNamedObjects. El proveedor de WMIPerfClass debe escanear esta estructura cuando crea la clase de rendimiento que está relacionada con los objetos Job.
Si esta estructura está hinchada debido al alto número de handles, la operación tendrá un alto uso de la CPU y tardará más de lo normal.
Se puede esperar un impacto para esta condición cuando un proceso está utilizando más de unos 30.000 mangos, o el número total de mangos en el sistema supera los 50.000.
Una actualización que se publica en marzo de 2020 para las versiones del sistema operativo compatibles incluye algunas optimizaciones de rendimiento y aborda algunas variantes de este problema. Consulte el historial de actualizaciones de Windows para obtener más información sobre la actualización que se aplica a su versión de Windows.
Uno o varios procesos que se ejecutan en el sistema están utilizando mucha memoria
Esto afecta a la creación de las clases de rendimiento de los procesos porque habrá que consultar el área de memoria de cada proceso en ejecución. La memoria utilizada por el proceso puede estar fragmentada, y esto hace que la operación consuma más recursos. Esto sucede porque WMIPerfClass también consulta los contadores de rendimiento «Costly».
Puede comprobar si los contadores de rendimiento Costly están habilitados ejecutando el siguiente comando de PowerShell:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Si el comando devuelve resultados, esto indica los contadores de rendimiento Costly que están habilitados. Por ejemplo:
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
Solución
Para solucionar el problema, identifique el proceso que está utilizando un gran número de asas o una gran cantidad de memoria.Es posible que el proceso tenga una fuga de memoria o un problema de fuga de control. Como solución, reinicie el proceso.
De forma predeterminada, si utiliza Windows Server 2016 o una versión posterior de Windows, los contadores de rendimiento costosos se desactivan a partir de las siguientes actualizaciones acumulativas:
- Windows Server 2016 / Windows 10 versión 1607 (RS1)
18 de octubre de 2018-KB4462928 (OS Build 14393.2580) - Windows 10 versión 1703 (RS2)
24 de julio de 2018-KB4338827 (OS Build 15063.1235) - Windows 10 versión 1709 (RS3)
24 de julio de 2018-KB4338817 (OS Build 16299.579) - Windows 10 versión 1803 (RS4)
16 de julio de 2018-KB4345421 (OS Build 17134.167)
Nota
Después de instalar la actualización acumulativa, si necesita las clases que están relacionadas con los contadores de rendimiento Costly, establezca el valor Enable Costly Providers a 1 (DWORD) en la siguiente subclave del registro para que vuelvan a estar disponibles:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
La actualización acumulativa no afectará al comportamiento cuando un proceso esté utilizando un gran número de manejadores.
Este problema ocurre cuando un cliente está consultando las clases de rendimiento. Normalmente se trata de una aplicación de monitorización.
Como solución, también se puede desactivar la aplicación de monitorización para evitar la creación de las clases de rendimiento.
Más información
WMI proporciona varias clases de rendimiento. Para obtener más información, consulte Clases de contadores de rendimiento.
Estas clases se crean dinámicamente basándose en los contadores de rendimiento que están disponibles en el sistema. Todas las clases se crean al mismo tiempo, no sólo las clases que se están consultando.
WMIPerfClass es el módulo que se encarga de crear estas clases cuando el cliente WMI consulta cualquiera de ellas o enumera las clases disponibles.
Estas clases de rendimiento se almacenan en una caché que se invalida después de 15 a 20 minutos. Tan pronto como la caché se invalida, las clases de rendimiento deben ser creadas de nuevo si un cliente las solicita.
Crear las clases de rendimiento significa que el módulo WMIPerfClass.dll tendrá que ser cargado dentro de un proceso WmiPrvSE.exe y el código relacionado ejecutado.