Windows Management Instrumentation CPU 使用率

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

Windows 中定期发生 WMI 提供程序主机 (WmiPrvSE.exe) 进程 CPU 使用率较高

  • 项目
  • 10/13/2022

本文内容

本文为定期发生 WmiPrvSE.exe 进程 CPU 使用率较高的问题提供了解决方法。

适用于:Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Window 10 - 所有版本
原始 KB 编号: 4483874

症状

使用基于 Windows 的计算机时,你会注意到 Windows Management Instrumentation (WMI) 提供程序主机 (WmiPrvSE.exe) 进程每隔 15 到 20 分钟就会使用高 CPU 容量 (接近 100%) 。

发生此问题时,使用任务管理器来标识占用较高 CPU 的 WmiPrvSE.exe 进程的标识符 (PID)。 然后,打开提升的命令提示符并运行以下命令:

tasklist /m wmiperfclass.dll

将显示加载了此模块的 WmiPrvSE.exe 进程的列表。 通常只列出一个进程。 但是,如果你同时有 32 位和 64 位的客户端,你可能会看到两个进程。示例输出如下:

图像名称 PID 模块
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll

如果所列进程的 PID 与你在任务管理器中找到的进程 PID 相匹配,则有可能遇到了本文中所描述的问题。

原因

此问题可能是由下列两种情况之一导致的:

一个或多个进程正在使用大量句柄

所有句柄都存储在内核结构 \BaseNamedObjects 中。 WMIPerfClass 提供程序在创建与作业对象相关的性能类时必须扫描此结构。

如果此结构由于句柄数量较大而膨胀,则此操作将具有高 CPU 使用率,并且比通常要花更长的时间。

当进程使用超过 30,000 个句柄或系统上的句柄总数超过 50,000 时,您可能会受到这种情况所带来的影响。

2020 年 3 月发布的针对受支持的操作系统版本的更新包括一些性能优化,并解决了与此问题类似的其他一些问题。 有关适用于 Windows 版本的更新的详细信息,请参阅 Windows 更新历史记录。

在系统上运行的一个或多个进程正在使用大量内存

这会影响 Process 性能类的创建,因为每个正在运行的进程的内存区域都将被查询。 进程所使用的内存可能会被碎片化,这使得操作会占用更多资源。 发生这种情况是因为 WMIPerfClass 也在查询“Costly”性能计数器。

你可以通过运行以下 PowerShell 命令来检查是否启用了 Costly 性能计数器:

‎ (gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}  

如果此命令返回结果,则证明已启用了 Costly 性能计数器。 例如:

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

解决方法

若要解决此问题,请标识使用大量句柄或大量内存的进程。此进程可能有内存泄漏或句柄泄漏问题。 作为解决方法,请重新启动该进程。

默认情况下,如果你使用的是 Windows Server 2016 或更高版本的 Windows,则从以下累积更新开始禁用 Costly 性能计数器:

  • Windows Server 2016 / Windows 10 版本 1607 (RS1)
    2018 年 10 月 18 日 - KB4462928(操作系统内部版本 14393.2580)
  • Windows 10 版本 1703 (RS2)
    2018 年 7 月 24 日 - KB4338827(操作系统内部版本 15063.1235)
  • Windows 10 版本 1709 (RS3)
    2018 年 7 月 24 日 - KB4338817(操作系统内部版本 16299.579)
  • Windows 10 版本 1803(RS4)
    2018 年 7 月 16 日 - KB4345421(操作系统内部版本 17134.167)

注意

安装累积更新后,如果需要与成本性能计数器相关的类,设置以下注册表子项下的“启用成本提供程序”的值1 (DWORD) 从而再次使用这些提供程序:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem

一个进程正在使用大量句柄时,累积更新不会影响这一行为。

客户端查询性能类时,会出现这一问题。 这通常是一个监视应用程序。

作为一种解决方法,你还可以禁用监视应用程序以阻止创建性能类。

详细信息

WMI 提供了几个性能类。 有关详细信息,请参阅性能计数器类。

这些类是基于系统可用的性能计数器动态创建的。 同时创建所有类,而不仅是要查询的类。

WMIPerfClass 模块指 WMI 客户端查询任何类或枚举可用类时,处理这些类的创建的模块。

这些性能类存储在缓存中,15 至 20 分钟后失效。 缓存失效后,必须在客户端请求性能类时再次创建。

创建性能类意味着 WMIPerfClass.dll 模块必须加载到一个 WmiPrvSE.exe 程序内并执行相关的代码。

跳到主要內容

已不再支援此瀏覽器。

請升級至 Microsoft Edge,以利用最新功能、安全性更新和技術支援。

在 Windows 中,每隔一段時間 WMI 提供者主機 (WmiPrvSE.exe) 處理序就出現高 CPU 使用率

  • 發行項
  • 10/13/2022

本文內容

本文針對 WmiPrvSE.exe 處理序每隔一段時間就出現高 CPU 使用率的問題,提供因應措施。

適用于:Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Window 10 - 所有版本
原始 KB 編號: 4483874

徵狀

當您使用 Windows 電腦時,注意到 Windows Management Instrumentation (WMI) 提供者主機 (WmiPrvSE.exe) 處理序每隔 15 分鐘到 20 分鐘,就會使用高 CPU 容量 (接近 100%) 。

發生此問題時,請使用 [工作管理員] 來識別正在取用高 CPU 的 WmiPrvSE.exe 處理序識別碼 (PID)。 接著,開啟提升權限的命令提示字元,然後執行下列命令:

tasklist /m wmiperfclass.dll

隨即顯示已載入此模組的 WmiPrvSE.exe 處理序清單。 通常只會列出一個處理序。 不過,如果您同時有 32 位元和 64 位元的用戶端,則可能會看到兩個處理序。這是輸出範例:

映射名稱 PID 模組
========== ======== ==========================
WmiPrvSE.exe 2140 WmiPerfClass.dll

如果所列處理序的 PID 與您在 [工作管理員] 中找到的處理序相符,您很可能是遇到本文所述的問題。

原因

下列任一項因素都會造成這個問題:

有一或多個處理序使用大量的處理常式

所有的處理常式都儲存在核心結構 \BaseNamedObjects。 在建立與工作物件相關的效能類別時,WMIPerfClass 提供者必須掃描此結構。

如果此結構因為有大量處理常式而膨脹,該作業會有高 CPU 使用率,而且處理時間會比平時長。

當處理序使用超過 30,000 個處理常式,或系統上的處理常式總數超過 50,000 時,您可以預料到此情況會產生影響。

為支援的作業系統版本於 2020 年 3 月發行的更新版本,可讓部分效能最佳化,並可解決此問題的一些變體。 如需有關您的 Windows 版本適用更新的詳細資訊,請參閱 Windows 更新記錄。

系統上執行的一或多個處理序正在使用大量記憶體

這會影響建立處理序效能類別,因為必須查詢每個執行中處理序的記憶體區域。 處理序使用的記憶體可能會很零散,因而讓作業耗用更大量的資源。 這是因為 WMIPerfClass 也會查詢「耗用大量資源」的效能計數器。

您可以執行下列 PowerShell 命令,檢查是否已啟用會耗用大量資源的效能計數器:

‎ (gwmi -query 'select * from meta_class').Name | ? { $_ -match "costly"}  

如果命令傳回下列結果,這表示已啟用會耗用大量資源的效能計數器。 例如:

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

因應措施

若要修正此問題,請找出使用大量處理常式或大量記憶體的處理序。此處理序可能會發生記憶體流失或處理常式流失問題。 請重新啟動處理序,作為因應措施。

根據預設,如果您使用 Windows Server 2016 或更新的 Windows 版本,則會從下列的累積更新開始,停用會耗用大量資源的效能計數器:

  • Windows Server 2016 / Windows 10 版本 1607 (RS1)
    2018 年 10 月 3 日 - KB4462928 (作業系統組建 14393.2580)
  • Windows 10 版本 1703 (RS2)
    2018 年 7 月 24 日 - KB4338827 (作業系統組建 15063.1235)
  • Windows 10 版本 1709 (RS3)
    2018 年 7 月 24 日 - KB4338817 (作業系統組建 16299.579)
  • Windows 10 1803 版 (RS4)
    2018 年 7 月 16 日 - KB4345421 (作業系統組建 17134.167)

注意事項

在累積更新安裝之後,如果您需要與成本高昂效能計數器相關的類別,請在以下的登錄子機碼之下,將 啟用 Costly Providers 的值設定為 1 (DWORD) ,使其再次可用:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem

當進程使用大量控制碼時,累積更新不會影響其行為。

當用戶端查詢效能類別時會發生此問題。 這通常是一個監控應用程式。

作為因應措施,您還可以禁用監控應用程式以防止創建效能類。

其他相關資訊

WMI 提供了多個效能類別。 如需詳細資訊,請參閱 效能計數器類別。

這些類別是根據系統上可用的效能計數器動態建立的。 所有的類別都會同時被建立,而不僅是正在查詢的類別。

WMIPerfClass 是當 WMI 用戶端查詢任何的類別或列舉可用類別時,處理建立這些類別的模組。

這些效能類別儲存在 15 到 20 分鐘後失效的快取中。 一旦快取失效,當用戶端請求效能類別時,該效能類就必須重新建立。

建立效能類別表示,將必須在 WmiPrvSE.exe 進程內載入 WMIPerfClass.dll 模組,並執行相關的程式碼。