- 11/16/2020
- 3 minuti per leggere
-
- D
- v
Questo articolo fornisce un workaround per il problema dell’elevato utilizzo della CPU da parte di WmiPrvSE.exe a intervalli regolari.
Versione originale del prodotto: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Window 10 – tutte le edizioni
Numero originale della KB: 4483874
Sintomi
Quando si utilizza un computer basato su Windows, si nota che il processo Windows Management Instrumentation (WMI) Provider Host (WmiPrvSE.exe) sta utilizzando un’elevata capacità della CPU (vicino al 100%) per diversi minuti ogni 15-20 minuti.
Quando il problema si verifica, usa Task Manager per identificare l’identificatore di processo (PID) del processo WmiPrvSE.exe che sta consumando un’elevata CPU. Poi, apri un prompt dei comandi elevato ed esegui il seguente comando:
tasklist /m wmiperfclass.dll
Sarà visualizzato l’elenco dei processi WmiPrvSE.exe che hanno questo modulo caricato. Di solito viene elencato solo un processo. Tuttavia, se hai sia client a 32-bit che a 64-bit, potresti vedere due processi. Questo è un esempio di output:
Image Name PID Modules
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll
Se il PID del processo elencato corrisponde a quello che hai trovato in Task Manager, è probabile che tu stia incontrando il problema descritto in questo articolo.
Cause
Questo problema può essere causato da uno dei seguenti fattori.
Uno o più processi stanno utilizzando un numero elevato di handle
Tutti gli handle sono memorizzati nella struttura del kernel \BaseNamedObjects. Il fornitore WMIPerfClass deve scansionare questa struttura quando crea la classe di prestazioni che è collegata agli oggetti Job.
Se questa struttura è gonfia a causa dell’alto numero di handle, l’operazione avrà un alto utilizzo della CPU e richiederà più tempo del normale.
Potreste aspettarvi un impatto per questa condizione quando un processo sta usando più di circa 30.000 handle, o il numero totale di handle sul sistema supera i 50.000.
Un aggiornamento che viene rilasciato a marzo 2020 per le versioni del sistema operativo supportate include alcune ottimizzazioni delle prestazioni e risolve alcune varianti di questo problema. Consultare la cronologia degli aggiornamenti di Windows per ulteriori informazioni sull’aggiornamento applicabile alla propria versione di Windows.
Uno o più processi in esecuzione sul sistema stanno utilizzando molta memoria
Questo influisce sulla creazione delle classi di prestazioni del processo perché l’area di memoria di ogni processo in esecuzione dovrà essere interrogata. La memoria utilizzata dal processo può essere frammentata, e questo rende l’operazione più dispendiosa in termini di risorse. Questo accade perché WMIPerfClass interroga anche i contatori di prestazioni “Costly”.
Puoi verificare se i contatori di prestazioni Costly sono abilitati eseguendo il seguente comando PowerShell:
(gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}
Se il comando restituisce risultati, questo indica i contatori di prestazioni Costly che sono abilitati. Per esempio:
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
Workaround
Per risolvere il problema, identificate il processo che sta usando un gran numero di handle o una grande quantità di memoria.Il processo potrebbe avere una perdita di memoria o un problema di perdita di handle. Come soluzione alternativa, riavviare il processo.
Per impostazione predefinita, se si utilizza Windows Server 2016 o una versione successiva di Windows, i contatori delle prestazioni costose sono disabilitati a partire dai seguenti aggiornamenti cumulativi:
- Windows Server 2016 / Windows 10 versione 1607 (RS1)
Ottobre 18, 2018-KB4462928 (OS Build 14393.2580) - Windows 10 versione 1703 (RS2)
24 luglio 2018-KB4338827 (OS Build 15063.1235) - Windows 10 versione 1709 (RS3)
24 luglio 2018-KB4338817 (OS Build 16299.579) - Windows 10 versione 1803 (RS4)
il 16 luglio 2018-KB4345421 (OS Build 17134.167)
Nota
Dopo l’installazione dell’aggiornamento cumulativo, se hai bisogno delle classi che sono collegate ai contatori delle prestazioni costose, imposta il valore Enable Costly Providers a 1 (DWORD) sotto la seguente sottochiave del registro di sistema per renderle nuovamente disponibili:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
L’aggiornamento cumulativo non influisce sul comportamento quando un processo sta utilizzando un gran numero di handle.
Questo problema si verifica quando un cliente sta interrogando le classi di prestazioni. Questa è solitamente un’applicazione di monitoraggio.
Come soluzione alternativa, puoi anche disabilitare l’applicazione di monitoraggio per impedire la creazione delle classi di prestazioni.
Più informazioni
WMI fornisce diverse classi di prestazioni. Per maggiori informazioni, vedi Classi di contatori di prestazioni.
Queste classi sono create dinamicamente in base ai contatori di prestazioni che sono disponibili sul sistema. Tutte le classi vengono create allo stesso tempo, non solo quelle che vengono interrogate.
WMIPerfClass è il modulo che gestisce la creazione di queste classi quando il client WMI interroga una di esse o enumera le classi disponibili.
Queste classi di prestazioni sono memorizzate in una cache che viene invalidata dopo 15-20 minuti. Non appena la cache viene invalidata, le classi di prestazioni devono essere create di nuovo se un client le richiede.
Creare le classi di prestazioni significa che il modulo WMIPerfClass.dll dovrà essere caricato all’interno di un processo WmiPrvSE.exe e il relativo codice dovrà essere eseguito.
Si tratta di un’operazione che non può essere eseguita.