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

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

問題を特定する

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

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

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

注:

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

次に例を示します。 [タスク マネージャー>の詳細] に移動し、[名前] で並べ替え、CPU 使用率が高い WmiPrvse.exe プロセスを見つけます。 プロセス ID (PID) を書き留めます。

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

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

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

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

[タスク マネージャー>サービス] に移動し、[名前] で並べ替え、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. [ プロセス] を 展開し、[ ID プロセス] を選択します。 すべての WmiPrvse# インスタンスを選択し、[OK の追加>]を選択します

    ID プロセス カウンターを追加する方法を示すスクリーンショット。

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

  4. [ カウンターの追加 ] ウィンドウで、[ プロセス ] を展開し、[ %Processor Time]\(プロセッサ時間\) を選択します。 CPU 使用率が高い PID と一致する WmiPrvse# を選択し、[OK の追加>]を選択します

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

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

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

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

次に、WmiPrvse#1カウンター %Processor Time が追加され、このプロセスの 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 プロセスに分割できます。

  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 使用率が高い時点で、メモリ、ハンドル、スレッド、ユーザー名などの他のリソース使用量に関する情報を収集します。 タスク マネージャーの [ 詳細 ] タブを使用し、正確な PID を選択して確認できます。

注:

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

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

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

プロセス エクスプローラーは、識別された PID でホストされている正確なプロバイダーを識別するのに役立ちます。 次の手順を実行します。

  1. プロセス エクスプローラーを管理者として実行します。 識別された WmiPrvse.exe PID を見つけ、そのプロパティに移動し、[ WMI プロバイダー ] タブを選択します。

  2. 次の例では、 WmiPrvse.exe PID 556 が見つかり、ホスティングしていることがわかりました。

    • WMI プロバイダー: MS_NT_EVENTLOG_PROVIDER
    • Namespace: root\CIMV2
    • DLL パス: %systemroot%\system32\wbem\ntevt.dll

    WmiPrvSE.exe:556 プロパティを示すスクリーンショット。

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

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

tasklist /m <Provider DLL>

次に例を示します:

tasklist /m ntevt.dll 

ntevt.dll ファイルのタスクリスト出力を示すスクリーンショット。

そのため、 WmiPrvse.exe プロセスに読み込まれるプロバイダーを理解し、毎回 WmiPrvse.exe プロセスの PID をメモしておくことが重要です。

CPU 使用率の高い原因となっている WmiPrvse.exe に読み込まれたプロバイダーがあれば、タスクを処理しているかどうかを理解できます。

タスクは、クライアント プロセスによって WMI サービスに送信された受信 WMI クエリであり、その後、適切な WMI プロバイダー プロセスに割り当てられます。 この例では、タスクがプロバイダーに MS_NT_EVENTLOG_PROVIDER 送信されます。 そのため、次の手順では、プロバイダーへの受信クエリとタスクを MS_NT_EVENTLOG_PROVIDER 調査します。

受信クエリを分析する

受信クエリの調査には、次のことが含まれます。

  • 高い CPU 使用率を引き起こしている WMI プロバイダーによって処理される 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 アクティビティのデバッグトレースを有効にします。

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

デバッグトレース は既定で無効になっており、それぞれを手動で有効にするには、[ トレース ] または [ デバッグ ] を右クリックし、[ログの 有効化] を選択します。

注:

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

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

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

  2. [名前を付けて保存] の種類を選択.xmlまたは.csv選択します。

    注:

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

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

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

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

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

重要な操作の一部は次のとおりです。

  • IWbemServices::ExecQuery method (wbemcli.h)
  • IWbemServices::ExecMethod method (wbemcli.h)
  • IWbemServices::ExecQueryAsync method (wbemcli.h)

保存された WMI-Tracing CSV ファイルのログ エントリの 1 つを次に示します。

レベル 日時 ソース イベント ID タスク カテゴリ 説明
情報 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 形式の同様のイベントは次のようになります。

 <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>{345E5566-0000-0000-0000-67343241D901}</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 = {345E5566-0000-0000-0000-67343241D901}; 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
  • Namespace: \\.\root\cimv2
  • 操作: IWbemServices::ExecQuery

別のログを次に示します。

レベル 日時 ソース イベント 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-0000000000000-000000000-0000000-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 番目の例では、 CreateInstanceEnum 操作が特定の WMI クラス Win32_NTLogEventに対して開始されます。

詳細については、「 Win32_NTLogEvent」を参照してください。WMI クラスに関連付けられている WMI プロバイダーの詳細が含まれています。

これで、CPU 使用率の高い原因となっている WmiPrvse.exe でホストされている WMI プロバイダー (MS_NT_EVENTLOG_PROVIDER)、ホスト ID (552)、および一部のクライアント プロセスによってクエリされている WMI クラス (Win32_NTLogEvent) が正確にわかります。

トレース ファイルを確認するために使用しているツールによっては、PID 552 またはホスト ID 552 または WmiPrvse.exentevt.dllWin32_NTLogEvent関連する操作のみを確認するために必要なフィルター 適用できます。

"Win32_NTLogEvent" を含む行または操作のみを表示するフィルターでは、結果は次のようになります。

レベル ソース イベント ID 説明
情報 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;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 = {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;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

上記の操作から、次の追加情報を取得できます。

  • Timestamp
  • 操作 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. gitHub - luctalpe/WMIMon から WMIMon.exe ツールをダウンロードします。 ツールは、Windows 上の WMI アクティビティを監視することです。
  3. WMIMon_Binaries.zip ファイルの内容をコンピューター上のフォルダーに抽出します。
  4. 管理者としてコマンド プロンプトを開き、WMIMon ファイルを抽出したフォルダーに移動します。
  5. コマンド プロンプトに「」と入力し、Enter キーをWMIMon.exe押して、WMIMon.exeファイルを実行します。
  6. WMIMon は、手順 1 で識別されたものも含め、システム上のプロセスによって行われた WMI 呼び出しの監視を開始します。
  7. WMIMon には、クライアント プロセス ID、操作によって呼び出される WMI 名前空間、WMI クラス名、要求を行うために使用されるユーザー アカウントなどの情報が表示されます。
  8. WMIMon からの出力を分析して、どのプロセスが WMI 呼び出しを頻繁に行い、CPU 使用率が高くなる可能性があるかを特定します。

これらの手順に従うことで、 WMIMon.exe を効果的に使用してシステム上の WMI アクティビティを監視し、WMI の過剰な使用によって引き起こされるパフォーマンスやセキュリティの問題を特定できます。

次に例を示します:

WMIMon によってキャプチャされたデータを示すスクリーンショット。

注:

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

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

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

その他のソリューション

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

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

  • アプリケーションとサービスの監視
  • システム センター構成マネージャー (SCCM) (policyhost.exe または Monitoringhost.exe)
  • WMI クエリ含む実行中のスクリプトをPowershell.exeする
  • サード パーティ製アプリケーション

データ収集

Microsoft サポートからの支援が必要な場合は、「 TSS for User Experience の問題を使用した情報の収集」に記載されている手順に従って情報を収集することをお勧めします。

WMI-Collect ツールを使用して情報を収集することもできます。 それらのステップは次のとおりです。

  1. WMI-Collect.zip をダウンロードし、C:\temp などのフォルダーに展開します。

  2. 管理者特権の PowerShell コマンド プロンプトから、スクリプトが保存されているフォルダーから WMI-Collect.ps1 スクリプトを実行します。 例:

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

    注:

    • PowerShell コマンド プロンプトを開いたままにし、"Enter キーを押して capture:" メッセージを停止し、 WmiPrvse.exe プロセスまたは WMI サービスの CPU 使用率の高い問題が再現されていることを確認します。
    • トレースを 1 分以上有効にしないでください。
  3. Enter キーを押してトレースを停止します。

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