# 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，事件 ID 5858 的错误会写出失败的查询和发出它的 `ClientProcessId`，事件 ID 5857 记录加载了哪个提供程序，以及跑着它的那个 `WmiPrvSE.exe` 的进程 ID。

再按 `Ctrl + Shift + Esc` 打开任务管理器，到“详细信息”页按 PID 排序，把 `ClientProcessId` 对上进程名，把占用高的那行 WMI Provider Host 的 PID 对上 5857 里的提供程序，几分钟里出现几百次的那个客户端，就是要找的程序。

日志里什么都没有，说明查询本身没出错，只是太频繁。这时一个个退出可疑的软件，先从硬件监控、灯效和风扇工具、厂商的更新助手，以及问题出现前刚装的软件开始，看提供程序主机一分钟内会不会降下来。

## 从源头解决

- 更新或者卸载那个反复查询的软件，很多监控工具有刷新间隔的设置，每秒一次很常见，其实很少需要。
- 忙的提供程序属于某个硬件厂商的软件，就更新这个软件或者它的驱动包，有些这类软件的旧版本本来就频繁查询 WMI。
- 退出或卸载引起问题的软件后重启一次，提供程序主机会按需重新启动，不需要手动清理什么。

## 不要这样做

- 不要反复结束 WMI Provider Host，下一个查询一来 Windows 就会再把它拉起来，提问的程序拿到一个错误，可能还会更频繁地重试。
- 不要禁用 Windows Management Instrumentation 服务，设置页面、Windows 更新、Defender 和很多驱动工具都要靠它。
- 不要因为 CPU 高就去重置或重建 WMI 存储库（`winmgmt /resetrepository`），那是修复存储库损坏用的，还可能删掉软件注册的提供程序，微软把它当作存储库损坏时的最后手段。

## Mole 能做什么

Mole for Windows 的状态页会把每一行 WMI Provider Host 和它的 CPU、内存、I/O 一起列出来，在这一行的菜单里选“为什么在运行？”，能看到 `C:\Windows\System32\wbem` 下的程序文件和启动它的进程，因为它是从 Windows 文件夹运行的，Mole 不会给它提供“终止”。Mole 自己也在两个地方用到 WMI，笔记本充电时，状态页最多每分钟查一次电池还要多久充满，运行诊断时会读一次磁盘健康状态，两处都不会循环查询。别的进程名可以看 [Windows 进程逐个解释](/zh/windows/blog/windows-processes-explained)，CPU 占用高的一般排查可以看 [Windows CPU 占用高怎么查](/zh/windows/blog/windows-high-cpu-usage)。

## 常见问题

### WMI Provider Host 是病毒吗？

真正的 `WmiPrvSE.exe` 在 `C:\Windows\System32\wbem` 下，同名文件出现在别的位置，就用 Windows 安全中心扫一下。

### WMI Provider Host 为什么 CPU 占用高？

有别的程序在太频繁地查询 WMI，或者在要很费劲的数据，事件查看器里的 WMI-Activity Operational 日志会写出失败查询背后的客户端进程 ID。

### 可以结束或者禁用 WMI Provider Host 吗？

结束它只管几秒，下一个查询来了 Windows 会重新启动它，禁用 WMI 服务会让设置、更新和驱动工具出问题。

### 为什么有好几个 WMI Provider Host 进程？

提供程序跑在不同的主机进程里，这样一个慢的提供程序不会拖住其他的，通常只有其中一个在忙。


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