Sat*_*hat 91 windows-7 process wmi hp-envy
我通常让我的笔记本电脑 24x7 运行,一天结束时,我的大腿因为过热而被烧伤真的很烦人。
过热似乎是 WMI 提供程序主机 (WmiPrvSE.exe) 每隔几分钟将 CPU 利用率飙升至 25% 的结果。为什么会发生这种情况?
我有一台运行在 Windows 7 Home Premium 上的 HP Envy 14(带有 HP 捆绑的垃圾)。
(注意:根据@nhinkle过去的观察,似乎 HP Wireless Manager 可能是罪魁祸首,有什么办法可以证实这一点?)
这个问题是本周的超级用户问题。
阅读 2011 年 2 月 28 日的博客条目以了解更多详细信息或提交您自己的本周问题。
nhi*_*kle 111
正如 Sathya 在他的问题中提到的,我之前在我的类似 HP 笔记本电脑上遇到过这个问题,现在我已经使用科学方法确认 HP 笔记本电脑上的 CPU 峰值是由 HP Wireless Assistant 引起的。或者,我可能会开始称呼它为 HP CPU Assassin。
问题:是什么导致 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
有问题。
快速的谷歌搜索证实了我的假设,即这是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 服务,再也没有出现过这个问题。
几个月后,沙迪亚问了这个问题。我决定一劳永逸地证明这是 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 移动中心,然后单击
Turn Wireless Off
按钮。
根据讨论HP支持论坛,这个问题已被固定在较新版本的惠普无线助手。如果您的笔记本电脑需要 HPWA 才能使用 wifi 开/关按钮,您可以从 HP 的驱动程序网站下载最新版本,并且可能不会再出现此问题。尽管如此,如果您不需要它来打开/关闭 wifi 按钮,那么安装此软件似乎仍然没有任何附加价值。
Tam*_*man 38
从 Microsoft Sysinternals下载ProcDump。
一旦 WmiPrvSE.EXE 达到 25% 持续 1 秒,就让它转储:
procdump.exe -c 25 -s 1 -x WmiPrvSE.EXE %HOMEPATH%\WmiPrvSE.dmp
Run Code Online (Sandbox Code Playgroud)
这将在您的用户文件夹中创建一个转储。
随意重复此 1 - 2 次,以便您有更多转储,并且可以确定原因已被转储,而不是另一个更正常的事件。
在线分析您的转储,并可选择在SpeedyShare上分享。
显示的堆栈跟踪应包括导致此问题的过程。
也许谷歌一些堆栈的顶级程序以更好地了解它们的作用。
如果它们没有帮助,您可能需要更高级的分析。请看我的下一节:
以管理员身份打开命令提示符,然后复制粘贴下一个命令:
xperf -start perf!GeneralProfiles.InBuffer -stackwalk profile && timeout -1 && xperf -stop perf!GeneralProfiles.InBuffer %HOMEPATH%\myTrace.etl
Run Code Online (Sandbox Code Playgroud)按ENTER 一次以启动命令,现在您必须等到尖峰发生。
运行以下命令以显示文件并对其进行分析(需要WinDBG / Symbols):
xperf %HOMEPATH%\myTrace.etl
Run Code Online (Sandbox Code Playgroud)如果你想让我研究一下:
由于 WmiPrvSE.EXE 是针对 CAPI 存储运行 WMI 查询的主机,由于IPC,即使使用 XPerf,您也可能无法找到原因,我刚刚发现的另一个解决方案是启用 WMI 日志记录并检查日志如所描述的在这里,所述ClientProcessId将是由WMI查询过程的PID。通过将 PID 列添加到 Task Manager 或Process Explorer,或者使用tasklist /FI "PID eq X"
X 是您找到的PID ,可以将此 PID 追溯到进程。
转储 1 的分析:第 94-115 行指示远程过程调用。转储 2 的
分析:第 84-105 行指示远程过程调用。
在内核中,启动了一个新线程来处理远程过程调用存根,它本质上是一个查询请求,WMI Provider 将执行并响应该请求。由于读取注册表和/或性能信息,这会导致高 CPU 活动。
由于转储是对单个时刻的捕获,因此您将无法看到哪个进程执行了 RPC。
因此,您需要一个像 XPerf 一样跟踪的程序,以查看将执行 RPC 的前一个线程。
或者,如果您启用 RPC State Information,您可以使用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]
Run Code Online (Sandbox Code Playgroud)
上面的例子在 RPC 上设置了一个断点,所以你可以看到谁在堆栈的第二行运行它。但是,在第一次调用时设置断点(请注意这是实时调试)不太可能帮助您查看每次是谁调用 WMI 提供程序...
那篇文章中有更多关于RPC 状态信息的信息可能会有所帮助,但是当我们可以只使用 XPerf 时,像我们这样胆小的人不应该经历所有这些。:-)
正如我们现在了解 RPC 工作原理的内部工作一样,我们也可以使用API Monitor:
将API 捕获过滤器设置为Rpcrt4.dll
模块。
与断点类似,我们想知道谁调用了RpcServerUseProtSeq
函数:
钩住每个正在运行的进程,除了那些低 PID 的进程(以防止崩溃)。
理想情况下,您不想挂钩dwm.exe
/winlogon.exe
或降低。
您也可以尝试单个进程并稍后从Hooked Processes窗口中取消它们...
虽然......我已经尝试过并且可以连接任何过程。
如果一切顺利,进行 RPC 调用的Hooked Process将包含线程。
单击这些线程后,您应该会看到一堆调用。
如果你这样做了,你就找到了导致问题的过程!
使您的计算机保持最新状态很重要,安装HPWA 4.0.10.0可以解决这个问题!;-)
har*_*ymc 13
Microsoft 博客条目WMIprvse 是真正的恶棍吗?显示了如何查找哪个进程负责 WmiPrvSE.exe 正在使用的 CPU。
该方法使用“显示分析和调试日志”的事件查看器选项来跟踪所有 WMI 活动,从而获取有罪进程的进程 ID。
只需为同一条船上的其他人添加这个,这个页面就遍布谷歌。我在 Windows 8.1 上的 Lenovo Yoga2 Pro 上,WmiProvderHost 将 CPU 峰值提高到 50% 并耗尽电池电量时遇到了同样的问题。
根据上面的一些出色的调查建议,我发现问题实际上是GoPro Studio(GoPro 相机附带的免费视频编辑软件)。它安装了一个监控服务,等待你连接你的相机,对我来说这是罪魁祸首。