为什么WMI提供程序主机(WmiPrvSE.exe)不断增加CPU?


87

我通常将笔记本电脑保持24x7全天候运行,到了一天结束时,我的大腿因过热而烧毁,真是令人讨厌。

过热似乎是WMI提供程序主机(WmiPrvSE.exe)每隔几分钟将CPU利用率提高到25%的结果。为什么会这样?

我有一个在Windows 7 Home Premium上运行的HP Envy 14(带有HP捆绑的废话)。

(注意:根据@nhinkle的过去观察,看来HP Wireless Manager可能是罪魁祸首,有什么办法可以确认这一点吗?)

这个问题是本周超级用户问题
阅读2011年2月28日的博客条目以了解更多详细信息,或提交自己的“本周问题”。


2
好吧,确认它的最佳方法是禁用它,看看它是否继续;)
Matthieu Cartier

@neuro heh,是的,但我想看看是否有任何超级用户使用不同的方法:)
Sathyajith Bhat

2
“烧大腿真的很烦”-> 大腿没什么,检查一下
塔玛拉·维斯曼

1
桌面上有小工具吗?例如。磁盘空间监控器
Kez

1
@kez Nope-没有小工具-干净的桌面。
Sathyajith Bhat

Answers:


110

正如Sathya在他的问题中提到的那样,我以前在类似的HP笔记本电脑上曾遇到过该问题的经验,现在我已使用科学方法确认HP笔记本电脑上的CPU峰值是由HP Wireless Assistant引起的。或者,我可能会开始调用HP CPU刺客。

实验概述

  • 问题是什么导致HP笔记本电脑上的CPU频繁出现高峰,特别是该 WmiPrvSE.exe 过程?

  • 假设HP Wireless Assistant(HPWA)引起了问题

  • 方法

    1. 查看在安装HPWA时是否开始出现问题。
    2. 查看WmiPrvSE.exeHPWA进程挂起时,CPU是否停止峰值,并且进程停止使用> 20%的CPU。
    3. 重新启用HPWA进程后,查看CPU是否再次开始出现峰值
    4. 重复步骤2和3进行多次试验,以确保结果准确
       
  • 结果HPWA导致CPU使用率过高

  • 结论您应该卸载HPWA,因为它没有任何用处

背景资料

当我拿到HP Pavillion dm4t笔记本电脑时,我注意到CPU的使用率经常会飙升到50%,几乎每隔一秒钟就会出现一次。这浪费了电池寿命,使笔记本电脑发热。与Sathya所经历的症状几乎相同。仅通过查看Windows 7中的资源监视器,我就可以看到该过程WmiPrvSE.exe有问题。

cpu nom nom

快速的Google搜索证实了我的假设,即这是Windows Management Instrumentation(WMI)主机进程。简而言之,WMI可用于查询系统信息,例如处理器使用率,正在运行的进程,已登录的人以及各种其他信息。WMI主机进程针对其他任何使它们生成进程的进程运行WMI查询,因此WmiPrvSE.exe它本身并不是罪魁祸首,它只是一个中介。

为了找出导致此问题的特定进程,我使用了Systinternals Process Explorer。我发现该WmiPrvSE.exe进程的哪个实例正在使用大量CPU,然后单击它以打开详细信息。

过程浏览器

不幸的是,我找不到任何方法来找出正在执行所有查询的进程,但是由于我已将其隔离为CPU峰值的来源,并且知道这是一项服务,因此我去了服务经理,看看哪个服务取决于WMI,认为这可能会导致我发现另一个线索。

服务标称

我认为这不是导致问题的内置Windows服务,因此消除这些问题,我决定按照清单进行操作并尝试禁用每个服务,然后查看问题是否仍然存在。排在最前面的是HP Wireless Assistant服务。我回到服务菜单,并禁用了该服务。回顾任务管理器,我发现CPU使用率几乎为零。我重新启动了HPWA服务。CPU使用率猛增。我现在有足够的数据来构成我的理论。我卸载了HPWA服务,再也没有问题了。

验证假设

几个月后,Sathya提出了这个问题。我决定一劳永逸地证明这是HPWA的错。我重新安装了HP Wireless Assistant,这是我几个月没有安装的。立即,处理器使用率猛增。然后,我进行了上面概述的实验。

首先,我在资源监视器中隔离了负责HPWA服务的过程。HPWA_Service.exeHPWA_Main.exe是两个。这是在这两个已处理的运行中的CPU使用情况:

hpwa运行的任务管理器

然后,我暂停了这两个过程。CPU使用率立即下降;稍等片刻后,图形上的先前CPU使用情况将被清除:

不运行hpwa的任务管理器

我再次启用了该进程,以查看使用率是否会回升。它做了:

任务管理器刚刚启用了hpwa
启用HPWA后的第一个高峰

启用hpwa后的任务管理器
启用HPWA后不久

再次暂停进程导致CPU使用率下降:

禁用hpwa后降低CPU使用率

我对此进行了另一个迭代测试,在第三次试用中,同样的事情再次发生。我认为有足够的证据表明HP Wireless Assistant引起了问题,随后禁用了该服务,现在将其卸载。

HPWA似乎要做的只是通知用户何时打开或关闭其无线功能以及吞噬CPU。使用内置的无线管理工具无法做的任何事情都无法解决,因此,我建议如果安装了此软件,则将其删除。


注意:至少有一个人报告说,卸载HPWA导致键盘上的无线开关停止工作。在我的笔记本电脑上,卸载HPWA后,它仍然可以正常工作,但是如果您的笔记本电脑确实停止工作,则可以始终从Windows内部禁用无线卡。按Winkey+ x打开Windows Mobility Center,然后单击Turn Wireless Off按钮。

Windows移动中心


根据讨论 HP支持论坛,这个问题已被固定在较新版本的惠普无线助手。如果您的笔记本电脑需要HPWA使用wifi的开/关按钮,则可以从HP的驱动程序网站下载最新版本,可能不再有此问题。但是,如果您不需要wifi开关按钮,则安装此软件似乎仍然没有任何附加价值。


+1-非常好,全面的答案。这就是我的CPU状态-带HP CPU刺客-i.imgur.com/dMwaJ.png
Sathyajith Bhat


18
哇!这是一个很棒的帖子!我见过的记录最全和截图最多的帖子之一!+1!
studiohack

2
+1,出色的侦探工作和带有截图的精美帖子,他们在Windows中使用无线助手软件,这是我在新PC上删除的第一件事。
摩押

1
对我来说,这是Dell Data Vault Service导致WMI Provider中的CPU峰值。这也是此答案中提到的依赖项。我通过Windows Clean Boot Method找到了这个。
Cerveser 2015年

38

故障排除

  1. 从Microsoft Sysinternals 下载ProcDump

  2. 一旦WmiPrvSE.EXE命中25%,持续1秒钟,则进行转储:

    procdump.exe -c 25 -s 1 -x WmiPrvSE.EXE %HOMEPATH%\WmiPrvSE.dmp
    

    这将在您的用户文件夹中创建一个转储。

    请再重复1-2次,这样您就可以进行更多的转储,并且可以确定原因已被转储,而不是其他更正常的事件。

  3. 在线分析您的转储,并可以选择在SpeedyShare共享

    替代方法WinDBG可以与命令一起使用!analyze -v,请确保设置符号

  4. 显示的堆栈跟踪应包括导致此的过程。

也许谷歌搜索了堆栈中的一些顶级程序,以更好地了解它们的作用。
如果他们没有帮助,您可能需要更高级的分析。请参阅我的下一部分:


  1. Windows性能分析工具为您的Windows版本下载设置。
  2. 在系统上安装软件。
  3. 以管理员身份打开命令提示符,然后复制并粘贴下一个命令:

    xperf -start perf!GeneralProfiles.InBuffer -stackwalk profile && timeout -1 && xperf -stop perf!GeneralProfiles.InBuffer %HOMEPATH%\myTrace.etl
    
  4. 按下ENTER 一次以启动命令,现在您将不得不等待直到出现尖峰。

  5. 尖峰结束后,立即转到控制台并按ENTER
  6. 等待一段时间后,将在您的用户文件夹中生成日志文件myTrace.etl。
  7. 运行以下命令以显示文件并进行分析(需要WinDBG / Symbols):

    xperf %HOMEPATH%\myTrace.etl
    

如果要我调查一下:

  1. 将您的用户文件夹中的myTrace.etl压缩为zip文件。
  2. SpeedyShare上共享压缩的zip文件。
  3. 在此处共享链接,我将尝试查找并向您显示问题的原因。

由于WmiPrvSE.EXE是针对CAPI存储运行WMI查询的主机,因此即使是XPerf也可能由于IPC而无法找到原因,我刚刚发现的另一种解决方案是启用WMI日志记录并检查日志如所描述的在这里,所述ClientProcessId将是由WMI查询过程的PID。通过将PID列添加到“任务管理器”或“ 进程资源管理器”中,或者tasklist /FI "PID eq X"其中X是找到的PID,可以将此PID追溯到流程。


转储1的分析: 94-115行指示远程过程调用转储2的
分析: 84-105行指示远程过程调用

在内核中,将启动一个新线程来处理“远程过程调用”存根,该存根本质上是WMI提供程序将执行并响应的查询请求。由于读取注册表和/或性能信息,因此导致CPU活动较高。

由于转储只是一瞬间的捕获,因此您将无法查看哪个进程执行了RPC。
因此,您需要一个跟踪XPerf的程序,以查看将要执行RPC的先前线程。

或者,如果启用RPC状态信息,则可以使用rpcdbg查看谁发起了调用。

例:

0:000> bp rpcrt4!RpcServerUseProtseqEpA
0:000> g
Breakpoint 0 hit
eax=00452000 ebx=7ffd5000 ecx=00452008 edx=00000014 esi=00d5f55c edi=7c911970
eip=77e97a0b esp=0012ff3c ebp=0012ff6c iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
RPCRT4!RpcServerUseProtseqEpA:
77e97a0b 8bff mov edi,edi
0:000> kb
ChildEBP RetAddr Args to Child
0012ff38 00401046 00452000 00000014 00452008 RPCRT4!RpcServerUseProtseqEpA
0012ff6c 00401e37 00000001 003330a0 00333120 hellos!main+0x46 [e:\projects\hello\hellos.c @ 21]

上面的示例在RPC上设置了一个断点,因此您可以看到谁在堆栈的第二行中运行它。但是,在第一次调用时设置断点(请注意,这是实时调试)不太可能帮助您查看谁每次都调用WMI提供程序。

那篇文章中有很多关于RPC状态信息的信息可能会有所帮助,但是当我们只能使用XPerf时,并不是像我们这样的胆小鬼会经历所有事情。:-)


现在我们知道了RPC的内部工作原理,我们还可以使用API Monitor

  1. 下载,安装并启动API Monitor。(如果有64位,则两次:一次x86,一次x64)
  2. 转到文件 -> 以管理员身份运行
  3. 将“ API捕获过滤器”设置为Rpcrt4.dll模块。

    在此处输入图片说明

  4. 与断点类似,我们想知道谁调用了这些RpcServerUseProtSeq函数:

    在此处输入图片说明

  5. 钩住每个正在运行的进程,但PID值较低的进程除外(以防止崩溃)。
    理想的,你不想钩dwm.exe/ winlogon.exe或更低。
    您还可以尝试单个进程,稍后再从“挂钩进程”窗口中将它们取消挂钩...

    虽然...我已经尝试过了,但可以进行任何处理。

  6. 如果一切顺利,进行RPC调用的Hooked Process将包含线程。
    在单击这些线程时,您应该会看到一堆调用。
    如果这样做,您已经找到导致问题的过程!

使计算机保持最新非常重要,安装HPWA 4.0.10.0可以解决此问题!;-)


@TomWij -网上转储分析12。在Dropbox上转储。另外,我知道PID。我该怎么办?
Sathyajith Bhat

1
非常好的答案,@ TomWiji,该文档确实对您有帮助...
studiohack

刚刚安装的HPWA,似乎没有启动。可能需要重新启动。如果在我的PC上也发生同样的情况,我将尝试更新该帖子,并说明大多数故障排除方法如何显示出问题所在。
塔玛拉·维斯曼

2
我更喜欢nhinkles的答案-但这也很棒而且很有帮助-但最重要的是,最近我一直想念API监控器之类的工具,因此感谢您和+1的帮助。
Tobias Plutat 2011年

2
@Tom,我没有那种印象,我当然也不想暗示。但是,我确实感到有渴望以比仅靠投票就无法理解的多得多的冗长性和区别性来认识该问题的两个出色答案。:)
Tobias Plutat 2011年

13

Microsoft博客条目WMIprvse是真正的反派吗?显示如何找到哪个进程负责WmiPrvSE.exe使用的CPU。

该方法使用“显示分析和调试日志”的“事件查看器”选项来跟踪所有WMI活动,从而获得有罪进程的进程ID。


是的,几天前说过,它也列在我的XPerf和Dump Analysis之间的帖子中,但是到目前为止他还没有检查PID,完成XPerf或完成API Monitor,所以我必须等他再应用分析。
塔玛拉·威斯曼

7

只需为同一船上的其他任何人添加此页面,此页面就会遍及Google。WmiProvderHost在Windows 8.1上的Lenovo Yoga2 Pro上将CPU占用的电量最多提高了50%,并消耗了电池,我遇到了同样的问题。

遵循上述一些出色的调查建议,我发现对我来说实际上是GoPro Studio(GoPro相机随附的免费视频编辑软件)。它安装了监视服务,等待您连接相机,对我而言,这是罪魁祸首。


3
Windows 8.1,在关闭GoPro常驻程序后,我的WMI Provider主机CPU使用率从40%下降至8%
user63227 2014年

Windows 8.1由于使用GoPro软件而导致CPU使用率过高。从系统托盘中将其关闭,然后恢复正常(并在启动时禁用)。
罗宾,

4

要对其进行调试,请使用Windows Performance工具箱中的 xperf 并运行以下cmd文件:

xperf -on PROC_THREAD+LOADER+PROFILE+INTERRUPT+DPC+DISPATCHER -stackwalk profile -BufferSize 1024 -MaxFile 256 -FileMode Circular -f Kernel.etl
xperf -start WMILogger -on Microsoft-Windows-WMI-Activity::0xff -BufferSize 1024 -f WMI.etl

echo Please capture about 30s of the WMI activity.

pause

xperf -stop
xperf -stop WMILogger
xperf -merge WMI.etl kernel.etl WMItracing.etl

del WMI.etl
del kernel.etl

在WPA.exe中打开生成的WMItracing.etl,然后将“通用事件”图从左侧拖放到分析窗格中。

在此处输入图片说明

现在,仅过滤到Microsoft-Windows-WMI-Activity事件,并查找WMI操作和ClientProcessId。

在我的示例中,此CLientProcessId属于一个名为Veeam ONE Monitor Server的工具。停止它,解决了CPU使用率问题

第二个示例如下所示:

在此处输入图片说明

在这里,您会看到周期性重复的PID为1924的进程的调用,该进程属于Intel ProSet Monitoring服务。

这里的CPU使用率也显示在CPU采样调用堆栈中:

在此处输入图片说明

因此,英特尔工具过于频繁地执行WMI通知查询,因此会引起问题。停止它,解决了问题。


1

您是否尝试过查看是否是病毒?像Windows服务那样,某些病毒确实很喜欢到处乱逛。确保该WmiPrvSE.exe进程位于c:\windows\system32\wbem目录中。如果没有,您可能要运行常规的间谍软件检测程序。如果不是间谍软件,则可能是另一个正在调用它的服务。我知道我的计算机上有一些快速运行的小工具,具有讽刺意味的是,性能监视器小工具有时会使我的CPU出现一点峰值。另外,它可能是另一种不时地压榨气体的服务。例如,惠普,戴尔等的过时软件。

除此之外,TomWij的其他答案似乎很不错,可以对其进行故障排除!


1
另一种更通用的检查方法是使用Sysinternals的Process Explorer,然后启用该Verify Signatures选项。然后,如果(Verified) XVerified Signer列中说,则表明它已由Microsoft验证,并且X在此情况下,可执行文件是产品/公司的一部分Microsoft Windows
塔玛拉·威斯曼

我很确定没有病毒/恶意软件。另外,WmiPrvSE存在于“ C:\Windows\system32\wbem已验证”列中,表示文件已验证。@TomWij
Sathyajith Bhat

@ Sathya我可能会说这是过时的软件,尤其是因为您评论说您的HP“带有HP捆绑废话”。尝试使用msconfig并在启动时禁用所有HP服务和程序,看看是否有帮助。
Duall'2

一点,我确实打算在修好SSD后重新安装Win 7,以为这将是一个有趣的问题-更多有关如何调试的知识
Sathyajith Bhat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.