我通常将笔记本电脑保持24x7全天候运行,到了一天结束时,我的大腿因过热而烧毁,真是令人讨厌。
过热似乎是WMI提供程序主机(WmiPrvSE.exe)每隔几分钟将CPU利用率提高到25%的结果。为什么会这样?
我有一个在Windows 7 Home Premium上运行的HP Envy 14(带有HP捆绑的废话)。
(注意:根据@nhinkle的过去观察,看来HP Wireless Manager可能是罪魁祸首,有什么办法可以确认这一点吗?)
我通常将笔记本电脑保持24x7全天候运行,到了一天结束时,我的大腿因过热而烧毁,真是令人讨厌。
过热似乎是WMI提供程序主机(WmiPrvSE.exe)每隔几分钟将CPU利用率提高到25%的结果。为什么会这样?
我有一个在Windows 7 Home Premium上运行的HP Envy 14(带有HP捆绑的废话)。
(注意:根据@nhinkle的过去观察,看来HP Wireless Manager可能是罪魁祸首,有什么办法可以确认这一点吗?)
Answers:
正如Sathya在他的问题中提到的那样,我以前在类似的HP笔记本电脑上曾遇到过该问题的经验,现在我已使用科学方法确认HP笔记本电脑上的CPU峰值是由HP Wireless Assistant引起的。或者,我可能会开始调用HP CPU刺客。
问题:是什么导致HP笔记本电脑上的CPU频繁出现高峰,特别是该 WmiPrvSE.exe
过程?
假设:HP Wireless Assistant(HPWA)引起了问题
方法:
WmiPrvSE.exe
HPWA进程挂起时,CPU是否停止峰值,并且进程停止使用> 20%的CPU。结果:HPWA导致CPU使用率过高
结论:您应该卸载HPWA,因为它没有任何用处
当我拿到HP Pavillion dm4t笔记本电脑时,我注意到CPU的使用率经常会飙升到50%,几乎每隔一秒钟就会出现一次。这浪费了电池寿命,使笔记本电脑发热。与Sathya所经历的症状几乎相同。仅通过查看Windows 7中的资源监视器,我就可以看到该过程WmiPrvSE.exe
有问题。
快速的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.exe
和HPWA_Main.exe
是两个。这是在这两个已处理的运行中的CPU使用情况:
然后,我暂停了这两个过程。CPU使用率立即下降;稍等片刻后,图形上的先前CPU使用情况将被清除:
我再次启用了该进程,以查看使用率是否会回升。它做了:
启用HPWA后的第一个高峰
启用HPWA后不久
再次暂停进程导致CPU使用率下降:
我对此进行了另一个迭代测试,在第三次试用中,同样的事情再次发生。我认为有足够的证据表明HP Wireless Assistant引起了问题,随后禁用了该服务,现在将其卸载。
HPWA似乎要做的只是通知用户何时打开或关闭其无线功能以及吞噬CPU。使用内置的无线管理工具无法做的任何事情都无法解决,因此,我建议如果安装了此软件,则将其删除。
注意:至少有一个人报告说,卸载HPWA导致键盘上的无线开关停止工作。在我的笔记本电脑上,卸载HPWA后,它仍然可以正常工作,但是如果您的笔记本电脑确实停止工作,则可以始终从Windows内部禁用无线卡。按+ x打开Windows Mobility Center,然后单击Turn Wireless Off
按钮。
根据讨论 HP支持论坛,这个问题已被固定在较新版本的惠普无线助手。如果您的笔记本电脑需要HPWA使用wifi的开/关按钮,则可以从HP的驱动程序网站下载最新版本,可能不再有此问题。但是,如果您不需要wifi开关按钮,则安装此软件似乎仍然没有任何附加价值。
从Microsoft Sysinternals 下载ProcDump。
一旦WmiPrvSE.EXE命中25%,持续1秒钟,则进行转储:
procdump.exe -c 25 -s 1 -x WmiPrvSE.EXE %HOMEPATH%\WmiPrvSE.dmp
这将在您的用户文件夹中创建一个转储。
请再重复1-2次,这样您就可以进行更多的转储,并且可以确定原因已被转储,而不是其他更正常的事件。
在线分析您的转储,并可以选择在SpeedyShare上共享。
显示的堆栈跟踪应包括导致此的过程。
也许谷歌搜索了堆栈中的一些顶级程序,以更好地了解它们的作用。
如果他们没有帮助,您可能需要更高级的分析。请参阅我的下一部分:
以管理员身份打开命令提示符,然后复制并粘贴下一个命令:
xperf -start perf!GeneralProfiles.InBuffer -stackwalk profile && timeout -1 && xperf -stop perf!GeneralProfiles.InBuffer %HOMEPATH%\myTrace.etl
按下ENTER 一次以启动命令,现在您将不得不等待直到出现尖峰。
运行以下命令以显示文件并进行分析(需要WinDBG / Symbols):
xperf %HOMEPATH%\myTrace.etl
如果要我调查一下:
由于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:
将“ API捕获过滤器”设置为Rpcrt4.dll
模块。
与断点类似,我们想知道谁调用了这些RpcServerUseProtSeq
函数:
钩住每个正在运行的进程,但PID值较低的进程除外(以防止崩溃)。
理想的,你不想钩dwm.exe
/ winlogon.exe
或更低。
您还可以尝试单个进程,稍后再从“挂钩进程”窗口中将它们取消挂钩...
虽然...我已经尝试过了,但可以进行任何处理。
如果一切顺利,进行RPC调用的Hooked Process将包含线程。
在单击这些线程时,您应该会看到一堆调用。
如果这样做,您已经找到导致问题的过程!
使计算机保持最新非常重要,安装HPWA 4.0.10.0可以解决此问题!;-)
Microsoft博客条目WMIprvse是真正的反派吗?显示如何找到哪个进程负责WmiPrvSE.exe使用的CPU。
该方法使用“显示分析和调试日志”的“事件查看器”选项来跟踪所有WMI活动,从而获得有罪进程的进程ID。
只需为同一船上的其他任何人添加此页面,此页面就会遍及Google。WmiProvderHost在Windows 8.1上的Lenovo Yoga2 Pro上将CPU占用的电量最多提高了50%,并消耗了电池,我遇到了同样的问题。
遵循上述一些出色的调查建议,我发现对我来说实际上是GoPro Studio(GoPro相机随附的免费视频编辑软件)。它安装了监视服务,等待您连接相机,对我而言,这是罪魁祸首。
要对其进行调试,请使用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通知查询,因此会引起问题。停止它,解决了问题。
您是否尝试过查看是否是病毒?像Windows服务那样,某些病毒确实很喜欢到处乱逛。确保该WmiPrvSE.exe
进程位于c:\windows\system32\wbem
目录中。如果没有,您可能要运行常规的间谍软件检测程序。如果不是间谍软件,则可能是另一个正在调用它的服务。我知道我的计算机上有一些快速运行的小工具,具有讽刺意味的是,性能监视器小工具有时会使我的CPU出现一点峰值。另外,它可能是另一种不时地压榨气体的服务。例如,惠普,戴尔等的过时软件。
除此之外,TomWij的其他答案似乎很不错,可以对其进行故障排除!
Verify Signatures
选项。然后,如果(Verified) X
在Verified Signer
列中说,则表明它已由Microsoft验证,并且X
在此情况下,可执行文件是产品/公司的一部分Microsoft Windows
。
C:\Windows\system32\wbem
已验证”列中,表示文件已验证。@TomWij