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 占用高排查指南 也是这个思路,提供程序主机的 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 进程逐个解释,CPU 占用高的一般排查可以看 Windows CPU 占用高怎么查。
常见问题
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 进程?
提供程序跑在不同的主机进程里,这样一个慢的提供程序不会拖住其他的,通常只有其中一个在忙。