为什么WMI Provider Host(WmiPrvSE.exe)会不停地把我的CPU飙升到25%?
我的笔记本一般都是24小时开机,到了最后,因为过热,大腿被烫伤了,真的很烦人。
(注:根据@nhinkle的过去的观察,似乎是HP Wireless Manager可能是罪魁祸首,有什么方法可以确认吗? )
这个问题是本周超级用户问题**。
我的笔记本一般都是24小时开机,到了最后,因为过热,大腿被烫伤了,真的很烦人。
(注:根据@nhinkle的过去的观察,似乎是HP Wireless Manager可能是罪魁祸首,有什么方法可以确认吗? )
这个问题是本周超级用户问题**。
正如Sathya在问题中提到的那样,我之前在我的类似惠普笔记本电脑上遇到过这个问题,现在我用科学的方法证实,惠普笔记本电脑上的CPU尖峰是由惠普无线助手造成的。或者说,惠普CPU刺客,我可能会开始叫它。
问题*。是什么原因导致惠普笔记本电脑的CPU频频秒杀,具体来说就是 WmiPrvSE.exe
_进程? _
假说* : 惠普无线助手(HPWA)导致的问题
方法* :
结果 : HPWA 导致 CPU 使用量过大_
结论 : 你应该卸载HPWA,因为它没有任何作用_
当我拿到HP Pavillion dm4t笔记本时,我发现CPU经常会频繁地飙升到50%的使用率,几乎每隔一秒钟就会出现一次。这是在消耗电池寿命,并使笔记本发热;与Sathya经历过的症状相同。在Windows 7中查看资源监控器,我就能看到WmiPrvSE.exe
进程出了问题。
快速的谷歌搜索证实了我的假设,这就是Windows管理仪表(WMI)主机进程。简而言之,WMI可以用来查询系统信息,比如处理器的使用情况,运行的进程,谁在登录,以及其他各种信息。WMI主机进程运行WMI查询的任何其他进程,所以WmiPrvSE.exe
本身并不是罪魁祸首,它只是一个中介。
不幸的是,我没有办法找到是哪个进程在做所有的查询,但由于我已经隔离了这个问题,并且知道这是一个服务,所以我去服务管理器中查看哪些服务依赖WMI,认为这可能会给我带来另一个线索。
我想应该不是Windows的内置服务导致的问题,所以排除了这些,我决定在列表中下一步,尝试禁用每个服务,看看问题是否依然存在。就在列表的顶部是惠普无线助手服务。我回到了服务菜单,并禁用了该服务。在任务管理器中回看,我看到CPU的使用率几乎没有了。我又打开了HPWA服务。CPU使用量又恢复了。我现在有了足够的数据来形成我的理论。几个月后,Sathya问我这个问题。我决定一劳永逸地证明这是HPWA的错。我重新安装了惠普无线助手,我已经好几个月没有安装了。马上,处理器的使用率就上升了。
首先,我在资源监控器中隔离了负责HPWA服务的进程,WmiPrvSE.exe
和HPWA_Service.exe
就是这两个进程。下面是这两个进程运行时的CPU使用情况:
然后,我暂停了这两个进程。CPU使用量立即下降了,这是之前的CPU使用量图上的CPU使用量清除后的样子:
我再次启用进程,看看使用量会不会回升。它做到了:
我又测试了一次迭代,第三次试验时,同样的事情又发生了。我认为这足以证明是惠普无线助手造成的问题,随后我将该服务禁用,并将其卸载。
HPWA所做的一切似乎只是在用户开启或关闭无线时通知用户,并吞噬CPU。没有什么是内置的无线管理工具做不到的,所以我建议如果你安装了这个软件,就把它卸载掉。
HPWA_Main.exe
按钮。&004 &004
根据惠普支持论坛上的讨论,这个问题已经在更多的惠普无线助手的最新版本中得到了修复。如果你的笔记本电脑需要HPWA来使用wifi的开启/关闭 按钮,你可以在惠普的驱动网站上下载最新版本的驱动程序,可能就不会再有这个问题了。尽管如此,如果你不需要它的wifi开/关按钮,安装了这个软件似乎还是没有任何附加值。
1.从 Microsoft Sysinternals 下载 ProcDump 。從 Microsoft Sysinternals 下載 ProcDump 。让它在WmiPrvSE.EXE达到25%时进行转储1秒:
4.堆栈跟踪应该包括导致这种情况的过程。
或许可以通过谷歌搜索一下堆栈中的一些顶级过程来了解它们的作用。见我的下一节:
从Windows性能分析工具中下载适合你的Windows版本的设置。在你的系统上安装该软件。打开命令提示符 **作为管理员*,然后复制粘贴下一条命令:
按回车键 **一次开始执行命令,现在你需要等待秒杀发生。在你的秒杀后,*马上进入控制台,按回车键
在等待一段时间后,一个日志文件 myTrace.etl 会在你的用户文件夹中产生。
如果你想让我检查一下:
由于WmiPrvSE. EXE是一个运行WMI查询的主机,你可能无法找到原因,即使是XPerf,由于IPC,另一个我刚刚找到的解决方案是启用WMI日志记录和检查日志,如这里,ClientProcessId是进行WMI查询的进程的PID。这个PID可以通过在任务管理器或进程资源管理器中添加一个PID列来追踪到进程,或者使用tasklist /FI "PID eq X"
,其中X是你找到的PID…..
分析 [ Dump 2 ](http://technet.microsoft.com/en-us/library/cc738291(WS.10):* 第84-105行表示有一个远程过程调用.aspx),在内核中,启动了一个新的线程处理一个远程过程调用存根.aspx),这实质上是一个查询请求,WMI提供程序将执行并响应。
由于转储是对单一时刻的捕获,所以你无法看到是哪个进程执行了RPC。
或者,如果你启用RPC状态信息,你可以使用rpcdbg来查看是谁发起的调用。但好吧,在第一次调用时设置一个断点(请注意,这是实时调试),不太可能帮助你看到每次调用WMI Provider的时候都是谁在调用…..
在那篇文章中还有很多关于RPC状态信息的信息可能会有帮助,但是像我们这样的胆小怕事的人是不会去看这些的,因为我们可以用XPerf来代替。下载、安装并启动API Monitor。(两次,如果你是64位的话:一次x86,一次x64)
2. 进入文件 –> 以管理员身份运行
3. 将API捕获过滤器设置为Rpcrt4.dll
模块
RpcServerUseProtSeq
函数:5.勾选每个运行进程,除了那些PID较低的进程(防止崩溃)。如果一切顺利的话,Hooked Process会包含线程。 点击这些线程后,你应该会看到一堆调用。 如果你看到了,你就找到了问题的进程了!
保持你的电脑的更新很重要,安装[HPWA 4.0.10.0]&003就能解决这个问题!;-)
微软的博客文章Is WMIprvse a real villain?_介绍了如何找到WmiPrvSE.exe使用的CPU是哪个进程。
该方法使用 “显示分析和调试日志 "的Event viewer选项来追踪所有的WMI活动,从而得到有罪进程的进程ID。
要调试它,请使用Windows Performance toolkit中的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,并将左侧的 “Generic Events "图拖放到分析窗格中。
现在只过滤到Microsoft-Windows-WMI-Activity事件,并查找WMI操作和ClientProcessId。第二个例子是这样的:
这里显示的是一个PID为1924的Process,它属于Intel ProSet Monitoring服务。停止它,修复了这个问题。