題 為什麼WMI提供程序主機(WmiPrvSE.exe)會繼續加載我的CPU?


我通常會把我的筆記本電腦保持在24x7全天候,並且在一天結束時因為過熱而讓我的大腿被燒傷真的很煩人。

過熱似乎是WMI Provider Host(WmiPrvSE.exe)每幾分鐘將CPU利用率提高到25%的結果。為什麼會這樣?

我在Windows 7 Home Premium上運行HP Envy 14(帶有HP捆綁的垃圾)。

(注:基於@ nhinkle的 過去的觀察,似乎惠普無線管理器可能是罪魁禍首,有沒有辦法確認這一點?)

這個問題是一個 本週超級用戶問題
  閱讀2011年2月28日 博客文章 了解更多詳情或 提交你自己的 本週的問題。


83
2018-02-02 12:36


起源


那麼,確認它的最好方法是禁用它,看它是否繼續;) - Matthieu Cartier
@neuro heh,是的,但我想看看是否有超級用戶有不同的方法:) - Sathya♦
“讓我的大腿燒傷真的很煩” - > 大腿什麼都沒有,檢查一下。 - Tom Wijsman
你桌面上有任何小工具嗎?例如。磁盤空間監視器 - Kez
@kez Nope - 沒有小工具 - 乾淨的桌面。 - Sathya♦


答案:


正如Sathya在他的問題中提到的,我以前在類似的HP筆記本電腦上遇到過這個問題的經驗,我現在已經確認使用科學方法,惠普筆記本電腦上的CPU峰值是由HP Wireless Assistant引起的。或者,HP CPU Assassin,因為我可能會開始稱之為。

實驗概述

  • 是什麼原因導致惠普筆記本電腦上的CPU頻繁出現高峰,特別是  WmiPrvSE.exe  處理?

  • 假設HP Wireless Assistant(HPWA)導致此問題

  • 方法

    1. 查看安裝HPWA時是否出現問題。
    2. 查看CPU是否停止尖峰和 WmiPrvSE.exe 當HPWA進程掛起時,進程停止使用> 20%的CPU。
    3. 重新啟用HPWA進程時,查看CPU是否再次啟動尖峰
    4. 對多個試驗重複步驟2和3,以確保結果準確
  • 結果HPWA導致極高的CPU使用率

  • 結論您應該卸載HPWA,因為它沒有任何用處

背景資料

當我拿到HP Pavillion dm4t筆記本電腦時,我注意到CPU的頻率會高達50%,幾乎每隔一秒鐘。這耗盡了電池壽命,並使筆記本電腦升溫;與Sathya經歷的症狀大致相同。只需查看Windows 7中的資源監視器,我就能看到該過程 WmiPrvSE.exe 有錯。

cpu nom nom

一個快速的谷歌搜索證實了我的假設,這是 Windows Management Instrumentation (WMI)主持人進程。簡而言之,WMI可用於查詢系統信息,如處理器使用情況,運行進程,登錄者以及各種其他信息。 WMI主機進程為任何其他進程運行WMI查詢,因此 WmiPrvSE.exe 本身並不是罪魁禍首,它只是一個中間人。

為了追捕導致這個問題的具體過程,我用了 Systinternals Process Explorer。我找到了哪個實例 WmiPrvSE.exe 進程使用了大量的CPU,並點擊它打開詳細信息。

process explorer

不幸的是,我看不出有什麼方法可以找出進行所有查詢的進程,但是由於我已將此作為CPU峰值的來源隔離,並且知道它是一項服務,我去了服務經理看看哪個服務取決於WMI,認為這可能會引導我另一條線索。

services nom nom

我認為它不會是一個內置的Windows服務導致問題,所以消除這些,我決定在列表中工作並嘗試禁用每個服務,並查看問題是否仍然存在。最重要的是惠普無線助理服務。我回到了服務菜單,並禁用了該服務。回顧一下任務管理器,我發現CPU使用率幾乎沒有變化。我重新打開了HPWA服務。 CPU使用率重新開始。我現在有足夠的數據來形成我的理論。我卸載了HPWA服務,再也沒遇到過這個問題。

驗證假設

幾個月後,沙迪亞問了這個問題。我決定一勞永逸地證明這是HPWA的錯。我重新安裝了HP無線助手,我幾個月沒有安裝過。馬上,處理器使用量大增。然後我完成了上面概述的實驗。

首先,我在資源監視器中隔離了負責HPWA服務的進程。 HPWA_Service.exe 和 HPWA_Main.exe 是兩個。以下是這兩個已處理運行的CPU使用情況:

task manager with hpwa running

然後,我暫停了兩個進程。 CPU使用率立即下降;以下是圖表上之前的CPU使用情況片刻之後的狀態:

task manager without hpwa running

我再次啟用了流程以查看是否會恢復使用。它做了:

task manager just enabled hpwa
我啟用HPWA時的第一個峰值

task manager after enabling hpwa
  我啟用HPWA後不久 

再次暫停進程會導致CPU使用率下降:

lower cpu usage after disabling hpwa

我再測試了一次迭代,在第三次試驗中,同樣的事情又發生了。我認為這個充分的證據表明HP Wireless Assistant導致了問題,並隨後禁用了該服務,現在將其卸載。

所有HPWA似乎都是在打開或關閉無線設備時通知用戶,併吞噬CPU。您無法使用內置的無線管理工具做任何事情,因此我建議您如果安裝了此軟件,則將其刪除。


注意: 至少有一人報告說,卸載HPWA會導致鍵盤上的無線開關停止工作。在我的筆記本電腦上,它在卸載HPWA後仍能正常工作,但如果你的筆記本電腦停止工作,你可以隨時從Windows內部禁用無線網卡。按 Winkey+X 打開Windows移動中心,然後單擊 Turn Wireless Off 按鈕。

windows mobility center


根據 討論 在HP支持論壇上,此問題已在更新版本的HP Wireless Assistant中得到修復。如果您的筆記本電腦需要HPWA使用wifi開/關按鈕,您可以從HP的驅動程序網站下載最新版本,可能不會再出現此問題。不過,如果您不需要它用於wifi開/關按鈕,那麼安裝此軟件似乎沒有任何附加價值。


107
2018-02-05 23:05



+1 - 非常好,全面的答案。這就是我的CPU狀態 - 用HP CPU Assassin - i.imgur.com/dMwaJ.png - Sathya♦
這是暫停服務的後期 i.imgur.com/dn2Em.png - Sathya♦
哇!這是一個 非常棒 發布!我記錄的文章和截圖最多的帖子之一 曾經 見過! +1! - studiohack♦
+1,令人敬畏的偵探工作和帶有截圖的漂亮帖子,他們在Windows中使用無線助手軟件,這是我在新PC上刪除的第一件事。 - Moab
對我來說就是這樣 戴爾數據保險庫服務 導致WMI提供程序中的CPU峰值。它也是這個答案中提到的依賴。我發現了這個 Windows Clean Boot方法。 - Cerveser


故障排除

  1. 下載 ProcDump 來自Microsoft Sysinternals。

  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. 輸入  一旦 要啟動命令,現在你必須等到尖峰發生。

  5. 在你的穗後 你去控制台然後按 輸入
  6. 等待一段時間後,將在您的用戶文件夾中生成一個日誌文件myTrace.etl。
  7. 運行以下命令以顯示該文件並進行分析(WinDBG的/符號 需要):

    xperf %HOMEPATH%\myTrace.etl
    

如果你想讓我調查一下:

  1. 將myTrace.etl從用戶文件夾壓縮為zip文件。
  2. 共享壓縮的zip文件 SpeedyShare
  3. 在此處分享鏈接,我將嘗試查找並向您顯示問題的原因。

由於WmiPrvSE.EXE是用於針對CAPI存儲運行WMI查詢的主機,因此即使使用XPerf也可能無法找到原因 IPC,我剛剛發現的另一個解決方案是啟用WMI日誌記錄並按照描述檢查日誌 這裡,ClientProcessId將是進行WMI查詢的Process的PID。通過向任務管理器添加PID列,可以將此PID跟踪回過程 Process Explorer或者 tasklist /FI "PID eq X" 其中X是您找到的PID ...


分析 轉儲1 第94-115行表示a 遠程過程調用
分析 轉儲2 第84-105行表示a 遠程過程調用

在內核中,啟動一個新線程 處理遠程過程調用存根,實質上是WMI Provider將執行和響應的查詢請求。由於讀取註冊表和/或性能信息,這會導致高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監視器

  1. 下載,安裝和啟動API Monitor。 兩次 如果你有64位:一次是x86,一次是x64)
  2. 文件  - > 以管理員身份運行
  3. 設置 API捕獲過濾器 到了 Rpcrt4.dll 模塊。

    enter image description here

  4. 與斷點類似,我們想知道是誰打電話給 RpcServerUseProtSeq 功能:

    enter image description here

  5. 鉤每個 運行過程 除了那些PID很低(以防止崩潰)。
    理想,你不想掛鉤 dwm.exe/winlogon.exe 或更低。
    您也可以嘗試單個進程,稍後從中解除它們 鉤子過程 窗口...

    雖然......我已經嘗試過了,可以勾解任何過程。

  6. 如果一切順利,那就是 鉤子過程 這使得RPC調用將包含線程。
    點擊這些主題後,你會看到一堆電話。
    如果你這樣做,你就發現了導致問題的過程!

安裝時,讓計算機保持最新非常重要 HPWA 4.0.10.0 解決這個問題! ;-)


38
2018-02-02 13:11



@TomWij - 在線轉儲分析 1, 2。轉儲 投寄箱。另外,我知道PID。我該怎麼辦? - Sathya♦
非常好的答案,@ TomWiji,文檔確實有幫助...... - studiohack♦
剛剛安裝HPWA,似乎沒有啟動。可能需要重新啟動。如果在我的電腦上發生同樣的情況,我會嘗試更新帖子並顯示大多數故障排除方法如何顯示問題發生。 - Tom Wijsman
我更喜歡nhinkles的答案 - 但這也很棒,也很有幫助 - 但最重要的是,像API監視器這樣的工具是我最近開始想念的東西,所以感謝和+1提示。 - Tobias Plutat
@湯姆,我沒有那種印象,我當然不想暗示它。然而,我 沒有 我覺得有一種衝動,可以認識到這個問題的兩個優秀答案,而不僅僅是單獨使用這個問題。 :) - Tobias Plutat


Microsoft博客條目 WMI是一個真正的惡棍嗎? 顯示如何查找哪個進程負責WmiPrvSE.exe正在使用的CPU。

該方法使用“顯示分析和調試日誌”的事件查看器選項來跟踪所有WMI活動,從而獲取有罪過程的進程ID。


13
2018-02-06 19:14



是的,說 幾天前 它也列在我的XPerf和轉儲分析之間的帖子中,但到目前為止他還沒有檢查PID,完成XPerf或完成API監視器,因此在進行進一步分析之前我將不得不等待他。 - Tom Wijsman


只需在同一條船上為其他人添加此內容,此頁面就在Google上。我有同樣的問題,WmiProvderHost將CPU高達50%,並在Windows 8.1上的聯想Yoga2 Pro上耗盡電池電量。

根據上面的一些優秀調查建議,我發現問題實際上就是我 GoPro Studio (GoPro相機附帶的免費視頻編輯軟件)。它安裝了一個監控服務,等待你連接你的相機,對我來說這是罪魁禍首。


7
2017-11-14 08:17



Windows 8.1,關閉GoPro常駐程序後,我的WMI Provider主機CPU使用率從40%下降到8% - user63227
由於GoPro軟件,Windows 8.1也經歷了高CPU使用率。從系統托盤關閉它並恢復正常(現在啟動時禁用)。 - Robin


要調試它,請使用xperf Windows性能工具包 並運行此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”圖表從左側放到分析窗格中。

enter image description here

現在過濾到 微軟Windows的WMI的活動僅限事件,並查找WMI操作和ClientProcessId。

在我的例子中,這個CLientProcessId屬於一個名為的工具 Veeam ONE Monitor服務器停止它,修復CPU使用問題

第二個例子如下所示:

enter image description here

如果你看到一個PID為1924的進程的重複調用屬於英特爾ProSet監控服務。

這裡的CPU使用率也顯示在CPU採樣調用堆棧中:

enter image description here

因此,英特爾工具過於頻繁地執行WMI通知查詢,這會導致問題。 停止它,解決了問題。


4
2017-08-02 16:07





你有沒有試過看它是不是病毒?有些病毒真的喜歡像這樣的Windows服務遊行。確保 WmiPrvSE.exe 過程位於 c:\windows\system32\wbem 目錄。如果沒有,您可能想要運行常規間諜軟件檢測程序。如果它不是間諜軟件,它可能是另一個正在調用它的服務。我知道我的計算機上運行了一些小工具,具有諷刺意味的是,性能監視器小工具有時會使我的CPU峰值有點飆升。此外,它可能是另一種服務,不時地按下這種氣體。例如,來自惠普,戴爾等的英國媒體報導。

除此之外,TomWij的另一個答案似乎非常適合排除故障!


1
2018-02-02 13:36



另一種更通用的檢查方法是使用 Process Explorer 從Sysinternals然後啟用 Verify Signatures 選項;然後,如果它說 (Verified) X 在裡面 Verified Signer 然後它由Microsoft驗證,可執行文件是產品/公司的一部分 X, 在這種情況下 Microsoft Windows。 - Tom Wijsman
我很確定沒有病毒/惡意軟件。此外,WmiPrvSE存在於 C:\Windows\system32\wbem 和已驗證的列表示文件已經過驗證。 @TomWij - Sathya♦
@Sathya我可能會說這是臃腫軟件,特別是因為你評論說你有一個HP“w / HP捆綁垃圾”。嘗試使用msconfig並在啟動時禁用所有HP服務和程序,看看是否有幫助。 - Duall
一點,我確實打算在修復我的SSD後重新安裝Win 7,認為這將是一個有趣的問題 - 更多學習如何調試 - Sathya♦