--- > [!NOTE] 目次 ```table-of-contents title: minLevel: 0 maxLevel: 0 includeLinks: true ``` --- > [!NOTE] リスト掲載用文字列 - [WMI の CPU 使用率の高い問題のトラブルシューティング - Windows Server](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/troubleshoot-wmi-high-cpu-issues)【kaushika-msft】() --- > [!NOTE] この記事の要約(箇条書き) - WMIのCPU高使用率問題のトラブルシューティングは、まず`WmiPrvse.exe`または`svchost.exe`(Winmgmtサービスをホスト)のどちらが高CPUを消費しているかを特定し、そのプロセスID(PID)を把握することから始める。 - 問題のあるPIDのリソース使用状況(メモリ、ハンドル、スレッド、ユーザー名)を収集し、ホストされているWMIプロバイダー(DLL)を特定する。 - WMIアクティビティ操作ログやWMIトレースを有効化し、高CPUの原因となっているWMIプロバイダーが処理している受信クエリ、WMIクラス、関連ユーザー、およびクエリを開始しているクライアントプロセスを分析する。 - `WMIMon`ツールもWMI呼び出しやクライアントPIDなどの監視に有効である。 - 原因となるクライアントプロセス(PID、アプリケーション、ユーザー)を特定し、関連サービスやアプリケーションを一時的に無効化またはアンインストールして問題を検証する。 - Microsoftサポートが必要な場合は、`TSS`ツールを使用して診断情報を収集する。 > [!NOTE] 要約おわり --- ## WMI の CPU 使用率の高い問題のトラブルシューティング この記事では、Windows オペレーティング システムでの Windows Management Instrumentation (WMI) の CPU 使用率の高い問題を診断する方法について説明します。 ## 問題を特定する ほとんどのシナリオでは、 WMIPRVSE.EXE プロセスによって CPU が消費され、WMI サービス (Winmgmt) をホスト *svchost.exe* が高い CPU 使用率を消費している場合がいくつかあります。 ### タスク マネージャーの \[プロセス\] ウィンドウまたは \[詳細\] ウィンドウを確認して、正確なプロセスを特定する プロセスが *WmiPrvse.exe* または *svchost.exe* (WMI サービス Winmgmt をホストしている) かどうかを特定し、プロセス ID を識別します。 次に例を示します。 **Task Manager** > **Details** に移動し、 **Name で並べ替え** CPU 使用率が高い *WmiPrvse.exe* プロセスを見つけます。 プロセス ID (PID) を書き留めます。 このスクリーンショットは、アクティブな **WMI プロバイダー ホスト** ( *WmiPrvse.exe* プロセス) の複数のインスタンスとその CPU 使用率を示しています。 ![タスク マネージャーを使用したプロセスを示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/task-manager-processes.png) タスク マネージャーを使用したプロセスを示すスクリーンショット。 このスクリーンショットは、サービス ホスト: Windows Management Instrumentation (Winmgmt サービスをホストしている *svchost.exe* ) とその CPU 使用率を示しています。 ![タスク マネージャーを使用した詳細を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/task-manager-details.png) タスク マネージャーを使用した詳細を示すスクリーンショット。 **Task Manager** > **Services** に移動し、 **Name** で並べ替え、Winmgmt サービスを見つけます。 PID を書き留めます。 サービスを右クリックし、 **\[詳細に移動\] を選択して** 次のように *svchost.exe* プロセスを見つけます。 ![タスク マネージャー経由のサービスを示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/task-manager-services.png) タスク マネージャー経由のサービスを示すスクリーンショット。 この例では、3 つの *WmiPrvse.exe* インスタンスのうち、PID 3648 が配置されており、CPU 使用率の約 25% を消費しています。 Winmgmt は、PID 2752 の *svchost.exe* プロセスでホストされます。 ### CPU 消費量を理解する これには、主に CPU の全体的な消費量と識別された PID の監視が含まれます。 CPU 消費のタイミング、方法、頻度に注意することが重要です。 特定の期間中に CPU 消費量が高いかどうかを把握して、状況を評価します。 特定のタスクまたはサービスのアクティブな実行、監視アプリケーションの実行、 *WmiPrvse.exe* または Winmgmt の高 CPU につながるスクリプトの実行など、アクティビティがあるかどうかを確認します。 パターンがあるかどうかを理解します。つまり、CPU 使用率が一貫しているか、不整合であるか、ランダムであるか、散発的であるか、または定期的なスパイクが発生します。 CPU 消費量の頻度を特定します。 生産時間、業務時間外、または 1 日のランダムな時刻にのみ発生するかどうかを確認します。 また、ユーザーのサインインやサインアウトなどの特定のアクティビティ中にも発生する可能性があります。 タスク マネージャーを使用して、CPU 使用率のパターンを視覚的にメモできます。 パフォーマンス モニター (Perfmon) ツールを使用して、識別した PID で *WmiPrvse.exe* の正確なインスタンスを識別する方法を示す例を次に示します。 また、任意のプロセス (WMI サービスをホストする *WmiPrvse.exe* または *svchost.exe* ) の CPU 消費量をグラフィカルに表示することもできます。 1. 管理者特権のコマンド プロンプトを開き、「 *Perfmon* 」と入力します。 2. 左側のウィンドウで **パフォーマンス モニター** を選択し、右側のウィンドウでプラス記号 (**+**) を選択して、 **カウンターの追加** ウィンドウを開きます。 3. **Process** を展開し、 **ID プロセス** を選択します。 すべての **WmiPrvse#** インスタンスを選択し、 **Add** > **OK** を選択します。 ![ID プロセス カウンターを追加する方法を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/id-process-counter.png) ID プロセス カウンターを追加する方法を示すスクリーンショット。 ![ID プロセス カウンターの詳細を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/id-process-counter-details.png) ID プロセス カウンターの詳細を示すスクリーンショット。 4. **カウンターの追加** ウィンドウで、 **Process** を展開し、 **%Processor Time** を選択します。 CPU 使用率が高い PID に一致する **WmiPrvse#** を選択し、 **\[追加** > **OK** を選択します。 ![%Processor Time カウンターを追加する方法を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/processor-time-counter.png) %Processor Time カウンターを追加する方法を示すスクリーンショット。 ![%Processor Time カウンターの詳細を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/processor-time-counter-details.png) %Processor Time カウンターの詳細を示すスクリーンショット。 5. "ID プロセス" カウンターの場合、 **Last** 、 **Average** 、 **Minimum** 、および **Maximum** はすべて、それぞれの *WmiPrvse.exe* プロセスの PID を表します。 CPU 使用率が高いインスタンスを正確に特定したら、 **Delete** キーを押して、 WmiPrvse# インスタンスの残りのインスタンスを一覧から削除できます。 この例では、PID 556 *WmiPrvse.exe* が CPU 使用率が高く、パフォーマンス モニターの PID 556 に一致する **WmiPrvse#1** であることを示しています。 次に、 **WmiPrvse#1 **の** %Processor Time** カウンターが追加され、このプロセスの CPU 使用率のライブ グラフィカル ビューが表示されます。 この例では、 **%Processor Time** **WmiPrvse#1** の色が黄色から赤に変更されています。 手順は、Wmimgmt サービスをホスト **svchost.exe** CPU 使用率が高い場合に、パフォーマンス モニターで適切な *svchost#* を見つける場合と同じです。 WMI サービスをホストしている *svchost.exe* プロセスが CPU 使用率が高く、WMI が問題の原因となっている可能性がある場合は、次のコマンドを実行して、 *svchost.exe* プロセスの PID が WMI サービスをホストしているかどうかを確認できます。 ```console tasklist /svc /fi "Services eq Winmgmt" ``` *svchost.exe* プロセスに複数のサービスが含まれている場合は、次の手順に従って WMI サービスを独自の *svchost.exe* プロセスに分割できます。 1. 管理者特権で管理者特権のコマンド プロンプトを開きます。 2. 次のコマンドを実行します。 ```console sc config Winmgmt type= own ``` 3. WMI サービスを再起動します。 サービスを再起動した後、 `Tasklist /svc` コマンドを実行して、Winmgmt サービスが独自の *svchost.exe* プロセスで実行されているかどうかを確認できます。 問題を解決した後、またはサービスを独自の *svchost.exe* プロセスにする必要がなくなったら、共有 *svchost.exe* プロセスに戻すことができます。 このアクションを実行するには、コマンド プロンプトから次のコマンドを実行し、WMI サービスをもう一度再起動します。 ```console sc config Winmgmt type= share ``` ## WmiPrvse.exeの診断 ここまでは、高い CPU 使用率を消費している *WmiPrvse.exe* の正確な PID しかありません。 次に、この PID に関するできるだけ多くの情報を収集します。 これは、状況を評価したり、問題の原因となっている可能性のあるものを特定したりするのに役立ちます。 他のリソース使用量に関する情報を収集するか、識別された *WmiPrvse.exe* PID によってホストされている正確な WMI プロバイダー (DLL) を特定します。 ### メモリ、ハンドル、スレッド、ユーザー名などのその他のリソース使用量 CPU 使用率が高い場合に、メモリ、ハンドル、スレッド、ユーザー名など、他のリソース使用量に関する情報を収集します。 タスク マネージャーの **Details** タブを使用して、正確な PID を選択して確認できます。 ![タスク マネージャーの CPU 使用率が高いサービスを示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/task-manager-high-cpu-usage-service.png) タスク マネージャーの CPU 使用率が高いサービスを示すスクリーンショット。 ### 識別されたWmiPrvse.exe PID によってホストされている正確な WMI プロバイダー (DLL) を識別する *WmiPrvSE.exe* プロセスに読み込まれたプロバイダーを識別するには、複数のメソッドがあります。 1. [Script を使用する: 実行中のすべての WMI プロバイダーを一覧表示します](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/support-tools/scripts-list-running-wmi-providers) 実行中のすべての Windows Management Instrumentation (WMI) プロバイダーを出力します。 2. [プロセス エクスプローラー](https://learn.microsoft.com/ja-jp/sysinternals/downloads/process-explorer) は、識別された PID でホストされている正確なプロバイダーを識別するのに役立ちます。 次のステップを実行します。 1. プロセス エクスプローラーを管理者として実行します。 識別された *WmiPrvse.exe* PID を見つけ、そのプロパティに移動し、 **WMI プロバイダー** タブを選択します。 2. 次の例では、 WMIPRVSE.EXE PID 556 が見つかり、ホストされていることがわかりました。 - WMI プロバイダー: `MS_NT_EVENTLOG_PROVIDER` - 名前空間: `root\CIMV2` - DLL パス: *%systemroot%\\system32\\wbem\\ntevt.dll* ![スクリーンショットは、WmiPrvSE.exe:556 プロパティを示しています。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/wmiprvse-pid-556.png) スクリーンショットは、WmiPrvSE.exe:556 プロパティを示しています。 3. ほとんどの場合、複数のプロバイダーが読み込まれている可能性があります。 CPU で時間を費やし、CPU の高い問題を引き起こしているプロバイダーのいずれかである可能性があります。 問題が断続的または頻度の低い場合、問題の原因となっている *WmiPrvse.exe* が時間の経過と同時に終了することがあります。 問題が再び発生した場合は、新しい *WmiPrvse.exe* インスタンス内の同じプロバイダーである可能性があります。 この状況では、プロバイダーが記載されたら、次のコマンドレットを実行して、そのプロバイダーを含む *WmiPrvse.exe* プロセスの現在の PID を表示します。 ```powershell tasklist /m <Provider DLL> ``` 次に例を示します。 ```powershell tasklist /m ntevt.dll ``` ![ntevt.dll ファイルのタスクリスト出力を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/tasklist-output.png) ntevt.dll ファイルのタスクリスト出力を示すスクリーンショット。 そのため、 *WmiPrvse.exe* プロセスに読み込まれるプロバイダーを理解し、毎回 *WmiPrvse.exe* プロセスの PID をメモしておくことが重要です。 WMIPRVSE.EXE に読み込まれたプロバイダーが CPU 使用率の高い原因になったら、タスクを処理しているかどうかを理解できます。 タスクは、クライアント プロセスによって WMI サービスに送信された受信 WMI クエリであり、その後、適切な WMI プロバイダー プロセスに割り当てられます。 この例では、タスクは `MS_NT_EVENTLOG_PROVIDER` プロバイダーに送信されます。 次の手順では、 `MS_NT_EVENTLOG_PROVIDER` プロバイダーへの受信クエリとタスクを調査します。 ## 受信クエリを分析する 受信クエリを調べるには、次の作業が含まれます。 - 高い CPU 使用率を引き起こす WMI プロバイダーによって処理される WMI クエリを識別します。 - WMI クラスのクエリ。 - 関連付けられているユーザー。 - クエリを開始するクライアント プロセス。 上記の情報は、一般公開されているツール [WMIMon](https://github.com/luctalpe/WMIMon) または イベント ビューアー で使用可能な WMI アクティビティ操作ログと WMI トレースを使用して収集できます。 ### 操作ログ: Microsoft-Windows-WMI-Activity/Operational 受信クエリは、Microsoft-Windows-WMI-Activity/Operational ログに操作イベントとして記録されます。このログは次の下にあります。 **イベント ビューアー** > **アプリケーションとサービス ログ** > **Microsoft** > **Windows** > **WMI-Activity** ログに記録されるイベントには、いくつかの種類があります。 CPU 使用率の高い *WmiPrvse.exe* プロセスが随時終了し、読み込まれているプロバイダーがわかっている場合は、次のイベントが、問題のプロバイダーをホストしている現在アクティブな *WmiPrvse.exe* プロセスを特定するのに役立つ可能性があります。 ```output 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 トレースを有効にするために "分析ログとデバッグ ログ" を有効にする **イベント ビューアー** で、 **View** > **Show Analytic および Debug Logs** を選択して、WMI アクティビティの **Debug** と **Trace** を有効にします。 ![イベント ビューアーでの操作を示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/event-viewer-operational.png) イベント ビューアーでの操作を示すスクリーンショット。 **Debug** および **Trace** は既定で無効になっており、 **Trace** または **Debug** を右クリックして\[ログの有効化 **を選択すると、各トレースを手動で有効にすることができます** 。 このトレースは、 *WmiPrvse.exe* プロセスによって高い CPU 消費量を観察しながら、または高い CPU 使用率の動作をキャプチャしてログをクリーンで中程度のサイズに保ち、トレースの分析を容易にするために十分な長さに保つことができます。 1. トレースをエクスポートするには、 **Trace** を右クリックし、\[すべてのイベントを保存...**\]** 選択します。 2. **\[種類として保存\]で`.xml` または`.csv` を選択** 。 3. トレース ファイルの目的の言語を選択します。 4. WMI アクティビティ操作イベントは、必要な形式で個別に保存して、確認および分析することもできます。 ### WMI トレース ファイルを確認する WMI トレース内には、すべての受信 WMI クエリの一部である複数の重要な操作が含まれています。 操作については、 [IWbemServices インターフェイス (wbemcli.h)](https://learn.microsoft.com/ja-jp/windows/win32/api/wbemcli/nn-wbemcli-iwbemservices) に記載されています。 重要な操作の一部を次に示します。 - `IWbemServices::ExecQuery` method (wbemcli.h) - `IWbemServices::ExecMethod` method (wbemcli.h) - `IWbemServices::ExecQueryAsync` method (wbemcli.h) 保存された WMI トレース CSV ファイルのログ エントリの 1 つを次に示します。 | Level | 日付と時刻 | source | イベント ID | タスクのカテゴリ | 説明 | | --- | --- | --- | --- | --- | --- | | 情報 | 05-05-23 14:48 | Microsoft-Windows-WMI-Activity | 11 | なし | CorrelationId = {aaaa0000-bb11-2222-33cc-444444dddddd};GroupOperationId = 30693;OperationId = 30694;Operation = Start IWbemServices::ExecQuery - root\\cimv2: select \* from Win32\_Product;ClientMachine = 21H2W10M;User = CONTOSO\\<UserName>;ClientProcessId = 5484;NamespaceName = 133277000000783520 | XML 形式の同様のイベントは次のようになります。 ```xml <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/> <EventID>11</EventID> <Version>0</Version> <Level>4</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x8000000000000000</Keywords> <TimeCreated SystemTime="2023-05-05T13:09:18.7442455Z"/> <EventRecordID>112</EventRecordID> <Correlation ActivityID="{eddc1bfb-0000-0000-0000-18b6cabf5949}"/> <Execution ProcessID="2752" ThreadID="4132"/> <Channel>Microsoft-Windows-WMI-Activity/Trace</Channel> <Computer>21H2W10M.contoso.com</Computer> <Security UserID="S-1-5-18"/> </System> <UserData> <Operation_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI"> <CorrelationId>{bbbb1111-cc22-3333-44dd-555555eeeeee}</CorrelationId> <GroupOperationId>28089</GroupOperationId> <OperationId>28090</OperationId> <Operation>Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product</Operation> <ClientMachine>21H2W10M</ClientMachine> <ClientMachineFQDN>21H2W10M.contoso.com</ClientMachineFQDN> <User>CONTOSO\<UserName></User> <ClientProcessId>5484</ClientProcessId> <ClientProcessCreationTime>133277000000783520</ClientProcessCreationTime> <NamespaceName>\\.\root\cimv2</NamespaceName> <IsLocal>true</IsLocal> </Operation_New> </UserData> <RenderingInfo Culture="en-US"> <Message>CorrelationId = {bbbb1111-cc22-3333-44dd-555555eeeeee}; GroupOperationId = 28089; OperationId = 28090; Operation = Start IWbemServices::ExecQuery - root\cimv2 : select * from Win32_Product; ClientMachine = 21H2W10M; User = CONTOSO\<UserName>; ClientProcessId = 5484; NamespaceName = 133277000000783520</Message> <Level>Information</Level> <Task/> <Opcode>Info</Opcode> <Channel/> <Provider>Microsoft-Windows-WMI-Activity</Provider> <Keywords/> </RenderingInfo> </Event> ``` 上記のサンプル操作の出力から、次の情報を取得して理解できます。 - クエリが開始された日: 2023-05-05 13:09:18 - マシン上:21H2W10M、 - クライアント PID から: 5484 - 操作 ID: 28089 - クエリ: `select * from Win32_Product` - 名前空間: `\\.\root\cimv2` - 操作: `IWbemServices::ExecQuery` 別のログを次に示します。 | Level | 日付と時刻 | source | イベント ID | タスクのカテゴリ | 説明 | | --- | --- | --- | --- | --- | --- | | 情報 | 05-05-23 14:47 | Microsoft-Windows-WMI-Activity | 12 | なし | ProviderInfo for GroupOperationId = 30641;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 | XML 形式の同じイベント: ```xml <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}"/> <EventID>12</EventID> <Version>0</Version> <Level>4</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x8000000000000000</Keywords> <TimeCreated SystemTime="2023-05-05T13:09:18.8438242Z"/> <EventRecordID>120</EventRecordID> <Correlation ActivityID="{2a353ead-0000-0000-0000-256f9de5fabd}"/> <Execution ProcessID="2752" ThreadID="4348"/> <Channel>Microsoft-Windows-WMI-Activity/Trace</Channel> <Computer>21H2W10M.contoso.com</Computer> <Security UserID="S-1-5-21-0000000000-0000000000-00000000-1103"/> </System> <UserData> <Operation_Provider_Info_New xmlns="http://manifests.microsoft.com/win/2006/windows/WMI"> <GroupOperationId>28096</GroupOperationId> <Operation>Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent</Operation> <HostId>556</HostId> <ProviderName>MS_NT_EVENTLOG_PROVIDER</ProviderName> <ProviderGuid>{FD4F53E0-65DC-11d1-AB64-00C04FD9159E}</ProviderGuid> <Path>%systemroot%\system32\wbem\ntevt.dll</Path> </Operation_Provider_Info_New> </UserData> <RenderingInfo Culture="en-US"> <Message>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</Message> <Level>Information</Level> <Task/> <Opcode>Info</Opcode> <Channel/> <Provider>Microsoft-Windows-WMI-Activity</Provider> <Keywords/> </RenderingInfo> </Event> ``` 2 番目の例の操作出力から、次の情報を取得して理解できます。 - 操作 CreateInstanceEnum は、SID を使用してユーザーに代わって開始されます:UserID="S-1-5-21-0000000000-00000000000-0000000000-1103" - 2023-05-05 13:09 - 正確な操作: `Provider::CreateInstanceEnum - MS_NT_EVENTLOG_PROVIDER : Win32_NTLogEvent` - ホスト ID: 556 - プロバイダー名: `MS_NT_EVENTLOG_PROVIDER` - プロバイダー パス: *%systemroot%\\system32\\wbem\\ntevt.dll* ## CPU 使用率が高い原因となっているクライアント PID を見つける このログ ファイルを確認する考え方は、CPU 使用率が高い識別された *WmiPrvse.exe* PID に関連付けられている操作を一覧表示し、受信クエリを理解し、だれが開始したか (クライアント プロセス) することです。 上で説明した例では、高い CPU 使用率を引き起こしている PID 552 です。 ログ出力の 2 番目の例から、特定の WMI クラス に対して操作 `Win32_NTLogEvent` が開始されます。 詳細については、WMI クラスに関連付けられている WMI プロバイダーの詳細を含む [Win32\_NTLogEvent](https://learn.microsoft.com/ja-jp/previous-versions/windows/desktop/eventlogprov/win32-ntlogevent#requirements) を参照してください。 CPU 使用率が高い原因となっている `MS_NT_EVENTLOG_PROVIDER` でホストされている WMI プロバイダー ()、クライアント プロセスでクエリを実行しているホスト ID (552)、WMI クラス (Win32\_NTLogEvent) がわかりました。 トレース ファイルの確認に使用しているツールによっては、必要なフィルターを適用して、 `Win32_NTLogEvent` または PID 552 またはホスト ID 552 または *ntevt.dll* *WmiPrvse.exe* 関連する操作のみを確認できます。 "Win32\_NTLogEvent" を含む行または操作のみを表示するフィルターでは、結果は次のようになります。 | Level | source | イベント ID | 説明 | | --- | --- | --- | --- | | 情報 | Microsoft-Windows-WMI-Activity | 11 | CorrelationId = {aaaa0000-bb11-2222-33cc-444444dddddd};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;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 | | 情報 | Microsoft-Windows-WMI-Activity | 11 | CorrelationId = {aaaa0000-bb11-2222-33cc-444444dddddd};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;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 | 上記の操作から、次の追加情報を取得できます。 - タイムスタンプ - 操作 ID: 30642; - 正確な演算 = `Start IWbemServices::CreateInstanceEnum - root\cimv2 : Win32_NTLogEvent`; - クライアント マシン = 21H2W10M - User = CONTOSO\\<UserName> - クエリを開始したクライアントの PID: 5484 最後に、クライアント プロセス 5484 の PID が取得され、 `Win32_NTLogEvent` するクエリが開始されます。 これはプロバイダー `MS_NT_EVENTLOG_PROVIDER` によって処理され、 WMIPRVSE.EXE PID 552 でホストされるため、CPU 使用率が高くなります。 クライアントの PID を絞り込んだら、次のいずれかのツールを使用してプロセス名を見つけます。 - [タスク マネージャー](https://learn.microsoft.com/ja-jp/shows/inside/task-manager) - [プロセス エクスプローラー](https://learn.microsoft.com/ja-jp/sysinternals/downloads/process-explorer) - [プロセス モニター](https://learn.microsoft.com/ja-jp/sysinternals/downloads/procmon) - [WMIMon](https://github.com/luctalpe/WMIMon) *WMImon.exe* は、システム イベントの追跡と監視、および WMI サービスのリソース使用状況を可能にする強力な監視ツールです。 これは、他のプロセスによって行われた WMI 呼び出しとクエリを識別し、クエリの頻度、クエリに使用されるユーザー アカウント、および要求された情報に関する情報を提供する重要な機能を果たします。 このデータは、パフォーマンスの問題をトラブルシューティングする必要があるシステム管理者に役立ちます。 このデータを収集して分析するには、次の手順に従います。 1. 上記の方法を使用して、CPU 使用率を消費している *WmiPrvSE.exe* の PID を特定します。 2. *WMIMon.exe* ツールを [GitHub - luctalpe/WMIMon](https://github.com/luctalpe/WMIMon) からダウンロードします。 ツールは、Windows 上の WMI アクティビティを監視することです。 3. *WMIMon\_Binaries.zip* ファイルの内容をコンピューター上のフォルダーに抽出します。 4. 管理者としてコマンド プロンプトを開き、WMIMon ファイルを抽出したフォルダーに移動します。 5. コマンド プロンプトに「」と入力し、 `WMIMon.exe` キーを押して、 WMIMon.exe ファイルを実行します。 6. WMIMon は、手順 1 で識別されたものを含め、システム上のプロセスによって行われた WMI 呼び出しの監視を開始します。 7. WMIMon には、クライアント プロセス ID、操作によって呼び出される WMI 名前空間、WMI クラス名、要求の実行に使用されるユーザー アカウントなどの情報が表示されます。 8. WMIMon からの出力を分析して、WMI 呼び出しが頻繁に行われ、CPU 使用率が高くなる可能性があるプロセスを特定します。 これらの手順に従うことで、 *WMIMon.exe* を効果的に使用してシステム上の WMI アクティビティを監視し、WMI の過剰な使用によって発生するパフォーマンスやセキュリティの問題を特定できます。 次に例を示します。 ![WMIMon によってキャプチャされたデータを示すスクリーンショット。](https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/system-management-components/media/troubleshoot-wmi-high-cpu-issues/wmimon-data.png) WMIMon によってキャプチャされたデータを示すスクリーンショット。 特定のクライアント PID、アプリケーション、または EXE を絞り込むのが不可能な場合があります。 このような場合は、ユーザー名や関連付けられているコンピューターなどの一般的なエンティティを考慮すると便利な場合があります。 つまり、クエリを開始するユーザーがサービス アカウントであるか、特定のアプリケーションに関連付けられているのかがわかります。 ### 他のソリューション 疑いのあるユーザーを確定したら、そのサービスを一時的に無効にするか、それに関連付けられているアプリケーションをアンインストールし、CPU 使用率の高い問題が解決されるかどうかを確認することを検討できます。 無効にすると観察を検証できるシナリオをいくつか次に示します。 - アプリケーションとサービスの監視 - System Center Configuration Manager (SCCM) (*policyhost.exe* または *Monitoringhost.exe*) - *WMI クエリを含むスクリプトの実行をPowershell.exe* する - サード パーティ製アプリケーション ## データ収集 Microsoft サポートからのサポートが必要な場合は、ユーザー エクスペリエンスの問題に TSS を使用して、 [Gather 情報に記載されている手順に従って情報を収集することをお勧めします](https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/windows-troubleshooters/gather-information-using-tss-user-experience#wmi) 。 1. [TSS.zip](https://aka.ms/getTSS) をダウンロードし、内容を抽出します。 2. 管理者特権の PowerShell コマンド プロンプトから次のコマンドレットを実行して、トレースを開始します。 コンピューターで高い CPU の問題が発生したとき、または問題を再現しているときにトレースを実行したままにします。 ```powershell .\TSS.ps1 -UEX_WMIBase -WIN_Kernel -ETWflags 1 -WPR CPU -Perfmon UEX_WMIPrvSE -PerfIntervalSec 1 -noBasicLog ``` 3. TSS ツールセットに従って、PowerShell コマンド プロンプトの手順に従ってトレースを停止します。 スクリプトは、すべてのトレースの結果と診断情報を含む zip ファイルを作成します。 サポート ケースが作成されたら、このファイルをセキュリティで保護されたワークスペースにアップロードして分析できます。 --- ## その他のリソース トレーニング ラーニング パス [Common Information Model と Windows Management Instrumentation を使用して管理情報を照会する - Training](https://learn.microsoft.com/ja-jp/training/paths/query-use-common-information-model-windows-management/?source=recommendations) このラーニング パスでは、Windows Management Instrumentation (WMI) と Common Information Model (CIM) について説明します。 これらのテクノロジは、コンピューターの情報にアクセスするのに役立ちます。 さらに、いずれのテクノロジも、ローカルおよびリモートのオペレーティング システム、コンピューター ハードウェア、インストールされているソフトウェアから管理情報にアクセスできます。