針對 WMI 高 CPU 使用量問題進行疑難排解

您所在的位置:网站首页 wmiprvse占用cpu过高 針對 WMI 高 CPU 使用量問題進行疑難排解

針對 WMI 高 CPU 使用量問題進行疑難排解

2023-10-17 04:42| 来源: 网络整理| 查看: 265

針對 WMI 高 CPU 使用量問題進行疑難排解 發行項 06/01/2023

本文說明如何在任何 Windows 作業系統上診斷 Windows Management Instrumentation (WMI) 高 CPU 使用量問題。

識別問題

在大部分情況下,CPU 會由 WmiPrvse.exe 程式取用,而且有幾個實例 svchost.exe 裝載 WMI 服務 (Winmgmt) 耗用高 CPU 使用量。

檢閱工作管理員的 [進程] 窗格或 [詳細資料] 窗格,以識別確切的程式

識別進程是否 WmiPrvse.exe 或 svchost.exe (裝載 WMI 服務 Winmgmt) ,並識別進程識別碼。

注意事項

您可能必須手動新增 PID 資料行,以檢視工作管理員中所有進程的進程識別碼。

以下為範例。 移至 [工作管理員>詳細資料],然後依[名稱] 排序,並找出耗用高 CPU 使用量的WmiPrvse.exe程式。 記下 PID) (進程識別碼。

此螢幕擷取畫面顯示 WMI 提供者主機 的多個實例 (WmiPrvse.exe 進程) 為作用中及其 CPU 使用率。

此螢幕擷取畫面顯示服務主機:Windows Management Instrumentation (svchost.exe 裝載 Winmgmt 服務) 及其 CPU 使用率。

移至 [工作管理員>服務],依[名稱] 排序,然後找出 Winmgmt 服務。 記下 PID。 以滑鼠右鍵按一下服務,然後選取 [移至詳細資料 ] 以找出 svchost.exe 程式,如下所示:

在此範例中,在三 個WmiPrvse.exe 實例中,PID 3648 位於 ,其耗用大約 25% 的 CPU 使用量。 Winmgmt 裝載于 PID 2752 的svchost.exe 程式之下。

瞭解 CPU 耗用量

這主要涉及觀察整體 CPU 耗用量和識別的 PID。 請務必注意 CPU 耗用量的時機、方式和頻率。

藉由瞭解 CPU 耗用量在特定時間是否很高來評估情況。 檢查是否有任何活動,例如執行特定工作或作用中服務、執行監視應用程式,或執行導致 WmiPrvse.exe 或 Winmgmt 高 CPU 的腳本。

瞭解是否有任何模式,這表示 CPU 使用量是一致的、不一致的、隨機的、偶爾的,或有週期性尖峰。

識別 CPU 耗用量的頻率。 檢查它是否只在生產時數、下班時間或一天的隨機時間期間發生。 它也可能發生在特定活動期間,例如使用者登入或登出。

您可以使用工作管理員,並以視覺化方式記下 CPU 使用模式。

以下範例示範如何使用 效能監視器 (Perfmon) 工具,以您識別的 PID 識別WmiPrvse.exe的確切實例。 您也可以取得任何進程 (WmiPrvse.exe或svchost.exe裝載 WMI 服務) 之 CPU 耗用量的圖形檢視。

開啟提升許可權的命令提示字元,然後輸入 Perfmon。

選取左窗格中的[效能監視器],然後選取右窗格中的加號 (+) ,以開啟 [新增計數器]視窗。

展開 [處理] ,然後選取 [識別碼進程]。 選取所有WmiPrvse#實例,然後選取[新增>確定]。

在 [ 新增計數器] 視窗中 ,展開 [處理] ,然後選取 [%Processor Time]。 選取符合 PID 耗用高 CPU 使用量的WmiPrvse#,然後選取 [新增>確定]。

對於 「識別碼進程」計數器, Last、 Average、 Minimum和 Maximum 全部代表個別 WmiPrvse.exe 進程的 PID。 一旦識別出耗用高 CPU 使用量的確切實例,您可以按Delete從清單中移除剩餘的 WmiPrvse#實例實例。

在此範例中,會指出WmiPrvse.exe PID 556 耗用高 CPU 使用量,而WmiPrvse#1符合 效能監視器 中的 PID 556。

然後新增WmiPrvse#1的計數器 %Processor 時間,以查看此進程 CPU 使用量的即時圖形檢視。 在此範例中,WmiPrvse#1的%Processor Time色彩會從黃色變更為紅色。

在裝載 Wmimgmt 服務svchost.exe高 CPU 使用量的情況下,在效能監視器中尋找正確的svchost#的步驟相同。

如果您觀察到裝載 WMI 服務的 svchost.exe 程式造成高 CPU 使用量,並懷疑 WMI 造成問題,您可以執行下列命令來確認 svchost.exe 進程的 PID 是否裝載 WMI 服務:

tasklist /svc /fi "Services eq Winmgmt"

如果 svchost.exe 套裝程式含多個服務,您可以遵循下列步驟,將 WMI 服務分成自己的 svchost.exe 程式:

以提高的許可權開啟提升許可權的命令提示字元。

執行下列命令:

sc config Winmgmt type= own

重新開機 WMI 服務。

重新開機服務之後,您可以執行 Tasklist /svc 命令來檢查 Winmgmt 服務是否在自己的 svchost.exe 程式下執行。

解決此問題或不再要求服務進入自己的 svchost.exe 程式之後,您可以將它放回共用 svchost.exe 程式。 您可以從命令提示字元執行下列命令,然後重新開機 WMI 服務,以執行此動作:

sc config Winmgmt type= share 診斷WmiPrvse.exe

到目前為止,您只有耗用高 CPU 使用 量的確切WmiPrvse.exe PID。 接下來,盡可能收集此 PID 的相關資訊。 這可協助您評估情況,或找出可能造成問題的狀況。 收集其他資源使用量的相關資訊,或識別所識別WmiPrvse.exePID 所裝載的確切 WMI 提供者 (DLL ) 。

其他資源使用量,例如記憶體、控制碼、執行緒和使用者名稱

收集高 CPU 使用量時的其他資源使用量資訊,例如記憶體、控制碼、執行緒和使用者名稱。 您可以使用工作管理員中的 [ 詳細 資料] 索引標籤,選取確切的 PID,然後加以檢閱。

注意事項

視需要新增其他資料行。

識別所識別WmiPrvse.exe PID 所裝載的確切 WMI 提供者 (DLL)

進程總管 可協助您識別所識別 PID 中裝載的確切提供者。 依照下列步驟執行:

以系統管理員身分執行進程總管。 找出識別 WmiPrvse.exe PID,移至其屬性,然後選取 [WMI 提供者] 索引 標籤。

在下列範例 中,WmiPrvse.exe 找到 PID 556 並找到裝載:

WMI 提供者: MS_NT_EVENTLOG_PROVIDER 命名 空間: root\CIMV2 DLL 路徑: %systemroot%\system32\wbem\ntevt.dll

在大部分情況下,可能會載入多個提供者。 這可能是任何在 CPU 中花費時間的提供者,導致高 CPU 問題。

有時候,如果問題為間歇性或不常發生,造成問題的 WmiPrvse.exe 可能會隨著時間終止。 當問題再次發生時,它可能是新WmiPrvse.exe實例中相同的提供者 () 。 在此情況下,一旦您記下提供者 () ,請執行下列 Cmdlet,以顯示包含該提供者 之WmiPrvse.exe 進程的目前 PID:

tasklist /m

以下為範例:

tasklist /m ntevt.dll

目前,輸出顯示 CIMWin32.dll 提供者已載入兩個不同的 WmiPrvse.exe 實例及其 PID。

因此,請務必瞭解 在WmiPrvse.exe 程式中載入哪些提供者,並每次記下 WmiPrvse.exe 程式的 PID。

當提供者 (的) 載入 WmiPrvse.exe 造成高 CPU 使用量之後,您就可以瞭解其是否正在處理任何工作。

工作可能是用戶端進程提交給 WMI 服務的傳入 WMI 查詢,然後指派給適當的 WMI 提供者程式。 在此範例中,工作會提交給 MS_NT_EVENTLOG_PROVIDER 提供者。 因此,下一個步驟是研究提供者的傳入查詢和工作 MS_NT_EVENTLOG_PROVIDER 。

分析傳入查詢

檢查傳入查詢涉及:

識別 WMI 查詢 (造成高 CPU 使用量的 WMI 提供者所處理的) 。 WMI 類別 (es) 查詢。 相關聯的使用者。 正在起始查詢的用戶端進程。

您可以使用公開可用的工具WMIMon或WMI-Activity作業記錄收集上述資訊,並在事件檢視器下WMI-Tracing。

作業記錄:Microsoft-Windows-WMI-Activity/Operational

傳入查詢會記錄為 Microsoft-Windows-WMI-Activity/Operational 記錄中的作業事件,可在下列專案下取得:

> 事件檢視器應用程式和服務記錄>Microsoft>Windows>WMI-Activity

已記錄數種類型的事件。

如果耗用高 CPU 的WmiPrvse.exe 程式會不時終止,而且您已經知道載入了哪些提供者 (的) ,下列事件可能有助於判斷裝載有問題提供者的目前作用 中WmiPrvse.exe 進程。

Log Name: Microsoft-Windows-WMI-Activity/Operational Source: Microsoft-Windows-WMI-Activity Event ID: 5857 Task Category: None User: NETWORK SERVICE Description: MS_NT_EVENTLOG_PROVIDER provider started with result code 0x0. HostProcess = wmiprvse.exe; ProcessID = 556; ProviderPath = %systemroot%\system32\wbem\ntevt.dll 啟用「分析和偵錯記錄」以啟用 WMI 追蹤

在事件檢視器中,選取 [檢視>顯示分析和偵錯記錄],以啟用 WMI 活動的偵錯和追蹤。

預設會停用[偵錯] 和 [追蹤],並以滑鼠右鍵按一下 [追蹤] 或 [偵錯],然後選取 [啟用記錄],手動啟用每個偵錯和追蹤。

注意事項

啟用 顯示分析和偵錯記錄 可對幾乎所有事件來源進行偵錯和追蹤,並建立額外的記錄。 因此,一旦調查完成,就必須停用此功能,而且將不再使用。

當您觀察 到WmiPrvse.exe 程式的高 CPU 耗用量,或足以擷取高 CPU 使用量的行為,讓記錄檔保持乾淨且大小適中,以便更輕鬆地分析追蹤時,可以保持啟用此追蹤。

以滑鼠右鍵按一下 [ 追蹤 ],然後選取 [ 將所有事件儲存為...],以匯出追蹤。

在 [另存新檔類型] 中選 .xml 取或 .csv 。

注意事項

您可以視需要選擇其他熟悉的格式,例如 .EVTX 。

選擇追蹤檔案所需的語言。

您也可以選擇個別儲存WMI-Activity作業事件,並以所需的格式供您檢閱和分析。

檢閱 WMI 追蹤檔案

在 WMI 追蹤內,包含多個重要作業,這些作業都是傳入 WMI 查詢的一部分。 作業記載于 iWbemServices 介面中, (wbemcli.h) 。

一些重要的作業如下:

IWbemServices::ExecQuery 方法 (wbemcli.h) IWbemServices::ExecMethod 方法 (wbemcli.h) IWbemServices::ExecQueryAsync 方法 (wbemcli.h)

以下是儲存WMI-Tracing CSV 檔案中的其中一個記錄專案:

層級 日期和時間 來源 事件識別碼 工作類別 描述 資訊 05-05-23 14:48 Microsoft-Windows-WMI-Activity 11 無 CorrelationId = {345E5566-0000-0000-0000-68343241D901};GroupOperationId = 30693;OperationId = 30694;Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product;ClientMachine = 21H2W10M;User = CONTOSO\ < UserName > ;ClientProcessId = 5484;NamespaceName = 133277000000783520

XML 格式的類似事件看起來像這樣:

11 0 4 0 0 0x8000000000000000 112 Microsoft-Windows-WMI-Activity/Trace 21H2W10M.contoso.com {345E5566-0000-0000-0000-67343241D901} 28089 28090 Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product 21H2W10M 21H2W10M.contoso.com CONTOSO\ 5484 133277000000783520 \\.\root\cimv2 true CorrelationId = {345E5566-0000-0000-0000-67343241D901}; GroupOperationId = 28089; OperationId = 28090; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\; ClientProcessId = 5484; NamespaceName = 133277000000783520 Information Info Microsoft-Windows-WMI-Activity

從上述範例作業輸出中,您可以取得並瞭解下列資訊:

查詢起始日期:2023-05-05,13:09:18 在電腦上:21H2W10M、 從用戶端 PID:5484 作業識別碼:28089 查詢: select * from Win32_Product 命名 空間: \\.\root\cimv2 操作: IWbemServices::ExecQuery

以下是另一個記錄:

層級 日期和時間 來源 事件識別碼 工作類別 描述 資訊 05-05-23 14:47 Microsoft-Windows-WMI-Activity 12 無 ProviderInfo for GroupOperationId = 30641;作業 = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent;HostID = 556;ProviderName = MS_NT_EVENTLOG_PROVIDER;ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E};路徑 = %systemroot%\system32\wbem\ntevt.dll

XML 格式的相同事件:

12 0 4 0 0 0x8000000000000000 120 Microsoft-Windows-WMI-Activity/Trace 21H2W10M.contoso.com 28096 Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent 556 MS_NT_EVENTLOG_PROVIDER {FD4F53E0-65DC-11d1-AB64-00C04FD9159E} %systemroot%\system32\wbem\ntevt.dll ProviderInfo for GroupOperationId = 28096; Operation = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent; HostID = 556; ProviderName = MS_NT_EVENTLOG_PROVIDER; ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E}; Path = %systemroot%\system32\wbem\ntevt.dll Information Info Microsoft-Windows-WMI-Activity

從第二個範例的作業輸出中,您可以取得並瞭解下列資訊:

CreateInstanceEnum 作業是代表具有 SID 的使用者起始:UserID=「S-1-5-21-000000000000-0000000000-00000000-1103」 在 2023-05-05,13:09 確切的作業: Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent 主機識別碼:556 提供者名稱: MS_NT_EVENTLOG_PROVIDER 提供者路徑: %systemroot%\system32\wbem\ntevt.dll 尋找造成高 CPU 使用量的用戶端 PIN

檢閱此記錄檔的概念是列出與所識別 WmiPrvse.exe PID 相關聯的作業,這些作業耗用高 CPU 使用量、瞭解傳入查詢,以及在用戶端程式) (起始這些查詢的人員。

在上述範例中,造成高 CPU 使用量的是 PID 552。

從記錄輸出的第二個範例中,會針對特定 WMI 類別 Win32_NTLogEvent 起始 CreateInstanceEnum作業。

如需詳細資訊, 請參閱 Win32_NTLogEvent,其中包含與 WMI 類別相關聯的 WMI 提供者詳細資料。

您現在知道造成高 CPU 使用量的WmiPrvse.exe中裝載 MS_NT_EVENTLOG_PROVIDER () 確切的 WMI 提供者、主機識別碼 (552) ,以及某些用戶端進程正在查詢的 WMI 類別 (Win32_NTLogEvent) 。

根據您用來檢閱追蹤檔案的工具,您可以套用必要的篩選,只檢閱與 或WmiPrvse.exe PID 552 或主機識別碼 552 或ntevt.dll相關的 Win32_NTLogEvent 作業。

篩選只會顯示包含 「Win32_NTLogEvent」 的行或作業,結果如下:

層級 來源 事件識別碼 描述 資訊 Microsoft-Windows-WMI-Activity 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901};GroupOperationId = 30641;OperationId = 30642;Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent;ClientMachine = 21H2W10M;User = CONTOSO\ < UserName > ;ClientProcessId = 5484;NamespaceName = 133277000000783520 資訊 Microsoft-Windows-WMI-Activity 12 ProviderInfo for GroupOperationId = 30641;作業 = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent;HostID = 556;ProviderName = MS_NT_EVENTLOG_PROVIDER;ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E};路徑 = %systemroot%\system32\wbem\ntevt.dll 資訊 Microsoft-Windows-WMI-Activity 11 CorrelationId = {345E5566-0000-0000-0000-68343241D901};GroupOperationId = 30697;OperationId = 30698;Operation = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent;ClientMachine = 21H2W10M;User = CONTOSO\ < UserName > ;ClientProcessId = 5484;NamespaceName = 133277000000783520 資訊 Microsoft-Windows-WMI-Activity 12 ProviderInfo for GroupOperationId = 30697;作業 = Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent;HostID = 556;ProviderName = MS_NT_EVENTLOG_PROVIDER;ProviderGuid = {FD4F53E0-65DC-11d1-AB64-00C04FD9159E};路徑 = %systemroot%\system32\wbem\ntevt.dll

從上述作業中,您可以取得下列其他資訊:

時間戳記 作業識別碼:30642; 確切的作業 = Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent ; 用戶端電腦 = 21H2W10M 使用者 = CONTOSO\ < UserName> 已起始查詢的用戶端 PID:5484

最後,您有用戶端進程 5484 的 PID,其會起始對 Win32_NTLogEvent 的查詢。 這會由提供者 MS_NT_EVENTLOG_PROVIDER 處理,並裝載在 WmiPrvse.exe PID 552 之下,這會導致高 CPU 使用量。

縮小用戶端 PIN 後,請使用下列其中一個工具來尋找進程名稱。

工作管理員 處理序總管 進程監視器 WMIMon WmiMon 的詳細資訊

WMImon.exe 是功能強大的監視工具,可讓您追蹤和監視系統事件,以及 WMI 服務的資源使用量。

它提供重要功能來識別其他進程所進行的 WMI 呼叫和查詢,以及提供查詢頻率、用於查詢的使用者帳戶,以及要求的資訊。

此資料適用于需要針對效能問題進行疑難排解的系統管理員。

若要收集和分析此資料,您可以遵循逐步指示:

使用上述方法來識別取用 CPU 使用量之 WmiPrvSE.exe 的 PID。 從GitHub - luctalpe/WMIMon下載WMIMon.exe工具。 此工具是監視 Windows 上的 WMI 活動。 將 WMIMon_Binaries.zip 檔案的內容解壓縮到您電腦上的資料夾。 以系統管理員身分開啟命令提示字元,然後移至您解壓縮 WMIMon 檔案的資料夾。 在命令提示字元中輸入 WMIMon.exe ,然後按Enter鍵,以執行WMIMon.exe檔案。 WMIMon 現在會開始監視系統上進程所進行的 WMI 呼叫,包括步驟 1 中識別的呼叫。 WMIMon 會顯示用戶端進程識別碼、作業呼叫的 WMI 命名空間、WMI 類別名稱,以及用來提出要求的使用者帳戶等資訊。 分析 WMIMon 的輸出,以識別) 進行頻繁 WMI 呼叫,且可能造成高 CPU 使用量的程式 (。

藉由遵循這些步驟,您可以有效地使用 WMIMon.exe 來監視系統上的 WMI 活動,並找出因過度使用 WMI 所造成的任何效能或安全性問題。

以下為範例:

注意事項

您可以在命令提示字元中執行 WMIMon.exe > Data.txt 命令,將 WMIMon 所擷取的資料匯出至文字檔。 若要停止資料擷取,請按Ctrl + C。

可能有一些棘手的情況,可能是無法縮小特定用戶端 PID、應用程式或 EXE。 在這種情況下,考慮一般實體,例如使用者名稱或相關聯的電腦,可能會很有用。

也就是說,瞭解起始查詢的使用者是否為服務帳戶或與特定應用程式相關聯。

其他解決方案

完成可疑專案之後,您可以考慮暫時停用其服務或卸載與其相關聯的應用程式,並檢查高 CPU 使用量問題是否已解決。

以下是停用它可驗證觀察的一些案例。

監視應用程式和服務 system center configuration manager (SCCM) (policyhost.exe或Monitoringhost.exe) Powershell.exe 執行包含 WMI 查詢的腳本 任何協力廠商應用程式 資料收集

如果您需要 Microsoft 支援服務的協助,建議您依照 使用 TSS 針對使用者體驗問題收集資訊中所述的步驟來收集資訊。

您也可以使用WMI-Collect工具來收集資訊。 步驟如下:

下載 WMI-Collect.zip ,並將它解壓縮到資料夾中,例如 C:\temp。

從提升許可權的 PowerShell 命令提示字元中,從儲存腳本的資料夾執行 WMI-Collect.ps1 腳本。 例如:

C:\temp\WMI-Collect.ps1 -Logs -Trace -Activity -Kernel -WPR -PerfMonWMIPrvSE

注意事項

讓 PowerShell 命令提示字元保持開啟,並顯示「按 ENTER 停止擷取」訊息,並確定 WmiPrvse.exe 程式或 WMI 服務高 CPU 使用量問題已重現。 不要讓追蹤保持啟用超過一分鐘。

按 Enter停止追蹤。

腳本會建立包含所有追蹤結果和診斷資訊的子資料夾。 壓縮資料夾。 建立支援案例之後,可以將此檔案上傳至安全工作區進行分析。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3