次の方法で共有


WMI の CPU 使用率の高い問題のトラブルシューティング

この記事では、Windows オペレーティング システムでの Windows Management Instrumentation (WMI) の CPU 使用率の高い問題を診断する方法について説明します。

問題を特定する

ほとんどのシナリオでは、WMIPRVSE.EXE プロセスによって CPU が消費され、WMI サービス (Winmgmt) をホストsvchost.exeが高い CPU 使用率を消費している場合がいくつかあります。

タスク マネージャーの [プロセス] ウィンドウまたは [詳細] ウィンドウを確認して、正確なプロセスを特定する

プロセスが WmiPrvse.exe または svchost.exe (WMI サービス Winmgmt をホストしている) かどうかを特定し、プロセス ID を識別します。

Note

タスク マネージャーですべてのプロセスのプロセス ID を表示するには、 PID 列を手動で追加する必要がある場合があります。

次に例を示します。 Task Manager>Details に移動し、Name で並べ替え CPU 使用率が高いWmiPrvse.exe プロセスを見つけます。 プロセス ID (PID) を書き留めます。

このスクリーンショットは、アクティブな WMI プロバイダー ホスト ( WmiPrvse.exe プロセス) の複数のインスタンスとその CPU 使用率を示しています。

タスク マネージャーを使用したプロセスを示すスクリーンショット。

このスクリーンショットは、サービス ホスト: Windows Management Instrumentation (Winmgmt サービスをホストしているsvchost.exe ) とその CPU 使用率を示しています。

タスク マネージャーを使用した詳細を示すスクリーンショット。

Task Manager>Services に移動し、Name で並べ替え、Winmgmt サービスを見つけます。 PID を書き留めます。 サービスを右クリックし、 [詳細に移動] を選択して 次のように svchost.exe プロセスを見つけます。

タスク マネージャー経由のサービスを示すスクリーンショット。

この例では、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 プロセス カウンターを追加する方法を示すスクリーンショット。

    ID プロセス カウンターの詳細を示すスクリーンショット。

  4. カウンターの追加 ウィンドウで、Process を展開し、%Processor Time を選択します。 CPU 使用率が高い PID に一致する WmiPrvse# を選択し、 [追加>OKを選択します。

    %Processor Time カウンターを追加する方法を示すスクリーンショット。

    %Processor Time カウンターの詳細を示すスクリーンショット。

  5. "ID プロセス" カウンターの場合、 LastAverageMinimum、および Maximum はすべて、それぞれの WmiPrvse.exe プロセスの PID を表します。 CPU 使用率が高いインスタンスを正確に特定したら、Delete キーを押して、WmiPrvse# インスタンスの残りのインスタンスを一覧から削除できます。

この例では、PID 556 WmiPrvse.exeが CPU 使用率が高く、パフォーマンス モニターの PID 556 に一致する WmiPrvse#1 であることを示しています。

次に、WmiPrvse#1%Processor Time カウンターが追加され、このプロセスの CPU 使用率のライブ グラフィカル ビューが表示されます。 この例では、 %Processor TimeWmiPrvse#1 の色が黄色から赤に変更されています。

手順は、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 プロセスに分割できます。

  1. 管理者特権で管理者特権のコマンド プロンプトを開きます。

  2. 次のコマンドを実行します。

    sc config Winmgmt type= own
    
  3. WMI サービスを再起動します。

サービスを再起動した後、 Tasklist /svc コマンドを実行して、Winmgmt サービスが独自の svchost.exe プロセスで実行されているかどうかを確認できます。

問題を解決した後、またはサービスを独自の svchost.exe プロセスにする必要がなくなったら、共有 svchost.exe プロセスに戻すことができます。 このアクションを実行するには、コマンド プロンプトから次のコマンドを実行し、WMI サービスをもう一度再起動します。

sc config Winmgmt type= share

WmiPrvse.exeの診断

ここまでは、高い CPU 使用率を消費している WmiPrvse.exe の正確な PID しかありません。 次に、この PID に関するできるだけ多くの情報を収集します。 これは、状況を評価したり、問題の原因となっている可能性のあるものを特定したりするのに役立ちます。 他のリソース使用量に関する情報を収集するか、識別された WmiPrvse.exe PID によってホストされている正確な WMI プロバイダー (DLL) を特定します。

メモリ、ハンドル、スレッド、ユーザー名などのその他のリソース使用量

CPU 使用率が高い場合に、メモリ、ハンドル、スレッド、ユーザー名など、他のリソース使用量に関する情報を収集します。 タスク マネージャーの Details タブを使用して、正確な PID を選択して確認できます。

Note

必要に応じて列を追加します。

タスク マネージャーの CPU 使用率が高いサービスを示すスクリーンショット。

識別されたWmiPrvse.exe PID によってホストされている正確な WMI プロバイダー (DLL) を識別する

WmiPrvSE.exe プロセスに読み込まれたプロバイダーを識別するには、複数のメソッドがあります。

  1. Script を使用する: 実行中のすべての WMI プロバイダーを一覧表示します実行中のすべての Windows Management Instrumentation (WMI) プロバイダーを出力します。

  2. プロセス エクスプローラー は、識別された 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 プロパティを示しています。

  3. ほとんどの場合、複数のプロバイダーが読み込まれている可能性があります。 CPU で時間を費やし、CPU の高い問題を引き起こしているプロバイダーのいずれかである可能性があります。

問題が断続的または頻度の低い場合、問題の原因となっている WmiPrvse.exe が時間の経過と同時に終了することがあります。 問題が再び発生した場合は、新しい WmiPrvse.exe インスタンス内の同じプロバイダーである可能性があります。 この状況では、プロバイダーが記載されたら、次のコマンドレットを実行して、そのプロバイダーを含む WmiPrvse.exe プロセスの現在の PID を表示します。

tasklist /m <Provider DLL>

次に例を示します。

tasklist /m ntevt.dll 

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 または イベント ビューアー で使用可能な WMI アクティビティ操作ログと WMI トレースを使用して収集できます。

操作ログ: 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 トレースを有効にするために "分析ログとデバッグ ログ" を有効にする

イベント ビューアーで、View>Show Analytic および Debug Logs を選択して、WMI アクティビティの DebugTrace を有効にします。

イベント ビューアーでの操作を示すスクリーンショット。

Debug および Trace は既定で無効になっており、 Trace または Debug を右クリックして[ログの有効化 を選択すると、各トレースを手動で有効にすることができます

Note

Show Analytic ログとデバッグ ログを有効にするとほぼすべてのイベント ソースのデバッグとトレースが有効になり、追加のログが作成されます。 したがって、調査が完了し、使用されなくなったら、これは無効にする必要があります。

このトレースは、 WmiPrvse.exe プロセスによって高い CPU 消費量を観察しながら、または高い CPU 使用率の動作をキャプチャしてログをクリーンで中程度のサイズに保ち、トレースの分析を容易にするために十分な長さに保つことができます。

  1. トレースをエクスポートするには、Trace を右クリックし、[すべてのイベントを保存...] 選択します。

  2. [種類として保存]で.xmlまたは.csvを選択

    Note

    必要に応じて、 .EVTX などの他の使い慣れた形式を選択できます。

  3. トレース ファイルの目的の言語を選択します。

  4. WMI アクティビティ操作イベントは、必要な形式で個別に保存して、確認および分析することもできます。

WMI トレース ファイルを確認する

WMI トレース内には、すべての受信 WMI クエリの一部である複数の重要な操作が含まれています。 操作については、 IWbemServices インターフェイス (wbemcli.h)に記載されています。

重要な操作の一部を次に示します。

  • 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 形式の同様のイベントは次のようになります。

 <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 形式の同じイベント:

<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を参照してください。

CPU 使用率が高い原因となっているMS_NT_EVENTLOG_PROVIDERでホストされている WMI プロバイダー ()、クライアント プロセスでクエリを実行しているホスト ID (552)、WMI クラス (Win32_NTLogEvent) がわかりました。

トレース ファイルの確認に使用しているツールによっては、必要なフィルターを適用して、Win32_NTLogEventまたは PID 552 またはホスト ID 552 またはntevt.dllWmiPrvse.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 を絞り込んだら、次のいずれかのツールを使用してプロセス名を見つけます。

WmiMon の詳細

WMImon.exe は、システム イベントの追跡と監視、および WMI サービスのリソース使用状況を可能にする強力な監視ツールです。

これは、他のプロセスによって行われた WMI 呼び出しとクエリを識別し、クエリの頻度、クエリに使用されるユーザー アカウント、および要求された情報に関する情報を提供する重要な機能を果たします。

このデータは、パフォーマンスの問題をトラブルシューティングする必要があるシステム管理者に役立ちます。

このデータを収集して分析するには、次の手順に従います。

  1. 上記の方法を使用して、CPU 使用率を消費している WmiPrvSE.exe の PID を特定します。
  2. WMIMon.exe ツールを GitHub - 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 によってキャプチャされたデータを示すスクリーンショット。

Note

WMIMon によってキャプチャされたデータをテキスト ファイルにエクスポートするには、コマンド プロンプトで WMIMon.exe > Data.txt コマンドを実行します。 データ キャプチャを停止するには、 Ctrl + C キーを押します。

特定のクライアント PID、アプリケーション、または EXE を絞り込むのが不可能な場合があります。 このような場合は、ユーザー名や関連付けられているコンピューターなどの一般的なエンティティを考慮すると便利な場合があります。

つまり、クエリを開始するユーザーがサービス アカウントであるか、特定のアプリケーションに関連付けられているのかがわかります。

他のソリューション

疑いのあるユーザーを確定したら、そのサービスを一時的に無効にするか、それに関連付けられているアプリケーションをアンインストールし、CPU 使用率の高い問題が解決されるかどうかを確認することを検討できます。

無効にすると観察を検証できるシナリオをいくつか次に示します。

  • アプリケーションとサービスの監視
  • System Center Configuration Manager (SCCM) (policyhost.exe または Monitoringhost.exe)
  • WMI クエリを含むスクリプトの実行をPowershell.exe する
  • サード パーティ製アプリケーション

データ収集

Microsoft サポートからのサポートが必要な場合は、ユーザー エクスペリエンスの問題に TSS を使用して、 Gather 情報に記載されている手順に従って情報を収集することをお勧めします

  1. TSS.zipをダウンロードし、内容を抽出します。

  2. 管理者特権の PowerShell コマンド プロンプトから次のコマンドレットを実行して、トレースを開始します。 コンピューターで高い CPU の問題が発生したとき、または問題を再現しているときにトレースを実行したままにします。

    .\TSS.ps1 -UEX_WMIBase -WIN_Kernel -ETWflags 1 -WPR CPU -Perfmon UEX_WMIPrvSE -PerfIntervalSec 1 -noBasicLog
    

    Note

    トレースを 2 分以上実行したままにします。 このウィンドウで問題が再現されていることを確認します。

  3. TSS ツールセットに従って、PowerShell コマンド プロンプトの手順に従ってトレースを停止します。

スクリプトは、すべてのトレースの結果と診断情報を含む zip ファイルを作成します。 サポート ケースが作成されたら、このファイルをセキュリティで保護されたワークスペースにアップロードして分析できます。