# WMI Provider Host CPU 使用率高怎麼解決

工作管理員裡的「WMI Provider Host」就是 `WmiPrvSE.exe`，Windows 用它回答程式對系統的各種提問，有哪些磁碟、電池還剩多少、哪些服務在執行，它很少因為自己的事佔用 CPU，長時間停在 10% 到 30%，多半是別的程式問得太勤，或是問的東西太費力，所以要找的是那個提問的程式，而不是這個提供者主機本身。

## 它到底在做什麼

Windows Management Instrumentation（WMI）是指令碼、監控工具、硬體廠商的配套軟體以及 Windows 自己讀取系統資訊的管道，請求由一個個提供者（provider）來回答，提供者跑在一個或幾個 `WmiPrvSE.exe` 處理程序裡，所以工作管理員裡可能同時有好幾列 WMI Provider Host。微軟的 [WMI CPU 用量高疑難排解指南](https://learn.microsoft.com/en-us/troubleshoot/windows-server/system-management-components/troubleshoot-wmi-high-cpu-issues)也是這個思路，提供者主機的 CPU 反映的是用戶端送來的查詢，要做的是找出是哪個用戶端、哪個提供者。

| 看到的現象 | 可能的原因 |
| --- | --- |
| 登入時衝一下，然後安靜 | 開機啟動的軟體和 Windows 讀一次系統清查資料 |
| 整天每隔幾秒就有一次穩定的負載 | 有工具在迴圈查詢 WMI，監控軟體、廠商工具、遊戲疊加層 |
| 裝了某個軟體後開始變高 | 這個軟體的服務或它帶的 WMI 提供者 |
| 好幾列 WMI Provider Host，只有一列忙 | 某一個提供者慢，其他的沒問題 |

## 找出是誰在提問

在開始功能表輸入 `eventvwr` 開啟事件檢視器，依序展開 應用程式及服務記錄檔 › Microsoft › Windows › WMI-Activity › Operational，事件識別碼 5858 的錯誤會寫出失敗的查詢和送出它的 `ClientProcessId`，事件識別碼 5857 記錄載入了哪個提供者，以及承載它的 `WmiPrvSE.exe` 的處理程序識別碼。

再按 `Ctrl + Shift + Esc` 開啟工作管理員，到「詳細資料」索引標籤依 PID 排序，把 `ClientProcessId` 對上處理程序名稱，把那列忙碌的 WMI Provider Host 的 PID 對上 5857 裡的提供者，幾分鐘裡出現幾百次的那個用戶端，就是要找的程式。

記錄裡什麼都沒有，說明查詢本身沒出錯，只是太頻繁。這時一個個結束可疑的軟體，先從硬體監控、燈效和風扇工具、廠商的更新助手，以及問題出現前剛裝的軟體開始，看提供者主機一分鐘內會不會降下來。

## 從源頭解決

- 更新或解除安裝那個反覆查詢的軟體，很多監控工具有重新整理間隔的設定，每秒一次很常見，其實很少需要。
- 忙的提供者屬於某個硬體廠商的軟體，就更新這個軟體或它的驅動程式套件，其中一些的舊版本以大量佔用 WMI 出名。
- 去掉原因後重新啟動一次，提供者主機會視需要重新啟動，不需要手動清理什麼。

## 不要這樣做

- 不要反覆結束 WMI Provider Host，下一個查詢一來 Windows 就會再把它拉起來，提問的程式拿到一個錯誤，可能還會更頻繁地重試。
- 不要停用 Windows Management Instrumentation 服務，設定頁面、Windows Update、Defender 和很多驅動程式工具都要靠它。
- 不要因為 CPU 高就去重設或重建 WMI 存放庫（`winmgmt /resetrepository`），那是修復存放庫損毀用的，還可能刪掉軟體註冊的提供者，微軟把它當作另一類問題的最後一步。

## Mole 能做什麼

Mole for Windows 的「狀態」頁面會把每一列 WMI Provider Host 和它的 CPU、記憶體、I/O 一起列出來，在這一列的選單裡選「為什麼在執行？」，能看到 `C:\Windows\System32\wbem` 下的程式檔案和啟動它的處理程序，因為它是從 Windows 資料夾執行的，Mole 不提供它的「結束」選項。Mole 自己也在兩個地方用到 WMI，筆電充電時，「狀態」頁面最多每分鐘查一次電池還要多久充飽，執行系統診斷時會讀一次磁碟健康狀態，兩處都不會迴圈查詢。別的處理程序名稱可以看 [Windows 處理程序逐個解釋](/tw/windows/blog/windows-processes-explained)，CPU 用量高的一般排查可以看 [Windows CPU 用量高怎麼查](/tw/windows/blog/windows-high-cpu-usage)。

## 常見問題

### WMI Provider Host 是病毒嗎？

真正的 `WmiPrvSE.exe` 在 `C:\Windows\System32\wbem` 下，同名檔案出現在別的位置，就用 Windows 安全性掃一下。

### WMI Provider Host 為什麼 CPU 用量高？

有別的程式在太頻繁地查詢 WMI，或是在索取很耗資源的資料，事件檢視器裡的 WMI-Activity Operational 記錄會寫出失敗查詢背後的用戶端處理程序識別碼。

### 可以結束或停用 WMI Provider Host 嗎？

結束它只管幾秒，下一個查詢來了 Windows 會重新啟動它，停用 WMI 服務會讓設定、更新和驅動程式工具出問題。

### 為什麼有好幾個 WMI Provider Host 處理程序？

提供者跑在不同的主機處理程序裡，這樣一個慢的提供者不會拖住其他的，通常只有其中一個在忙。


Canonical: https://mole.fit/tw/windows/blog/wmi-provider-host-high-cpu
