WMI Provider HostのCPU使用率が高い原因を見つける方法
タスクマネージャーのWMI Provider HostはWmiPrvSE.exeで、プログラムがシステムについて尋ねる質問に答えるWindowsのプロセスです。どんなディスクがあるか、バッテリーがどれだけ残っているか、どのサービスが動いているか、といったことです。自分の都合でCPUを使うことはほとんどありません。10〜30%が長く続くなら、ほかのプログラムが頻繁に、または重い問い合わせをしているので、直すのはプロバイダーホストではなく、そのプログラムを見つけることです。
何をしているのか
Windows Management Instrumentation(WMI)は、スクリプト、監視ツール、ドライバーの付属アプリ、Windows自身がシステム情報を読む仕組みです。リクエストはプロバイダーが処理し、プロバイダーは1つ以上のWmiPrvSE.exeプロセスの中で動きます。タスクマネージャーにWMI Provider Hostの行が同時にいくつも出るのはこのためです。MicrosoftのWMIの高いCPU使用率のトラブルシューティングも同じことを述べていて、プロバイダーホストのCPUはクライアントが送るクエリを映したもので、やるべきことはどのクライアントとどのプロバイダーかを特定することです。
| 見え方 | 考えられる原因 |
|---|---|
| サインイン時に短いスパイク、その後は静か | スタートアップのアプリと、Windowsが一度だけインベントリを読む |
| 数秒おきの一定の負荷が一日中続く | WMIをループで問い合わせるツール。モニター、ベンダーのユーティリティ、ゲームのオーバーレイ |
| 1つのアプリをインストールした後にCPUが高い | そのアプリのサービス、またはそのWMIプロバイダー |
| WMI Provider Hostの行がいくつもあり、1つだけ忙しい | 1つのプロバイダーが遅く、ほかは問題ない |
問い合わせているプログラムを探す
イベント ビューアー(スタートにeventvwrと入力)を開き、アプリケーションとサービス ログ › Microsoft › Windows › WMI-Activity › Operationalへ進みます。イベントID 5858のエラーは、失敗したクエリと、それを送ったClientProcessIdを示します。イベントID 5857は、どのプロバイダーが読み込まれたか、それをホストしているWmiPrvSE.exeのプロセスIDを記録します。
次にCtrl + Shift + Escでタスクマネージャーを開き、詳細タブをPIDで並べ替えます。ClientProcessIdを名前に対応させ、忙しいWMI Provider HostのPIDを5857のプロバイダーに対応させます。数分のうちに何百ものイベントに現れるクライアントが、答えです。
ログが静かなら、頻繁なだけで行儀のよいクエリはエラーを残しません。その場合は候補のアプリを1つずつ終了します。ハードウェアモニター、RGBやファンのユーティリティ、ベンダーの更新ヘルパー、問題が始まる直前にインストールしたものから順に、1分以内にプロバイダーホストが落ち着くかを見ます。
原因のところで直す
- 問い合わせているアプリを更新するかアンインストールします。多くの監視ツールには更新間隔の設定があります。1秒に1回はよくある設定ですが、ほとんど必要ありません。
- 忙しいプロバイダーがハードウェアベンダーのソフトウェアのものなら、そのソフトウェアやドライバーパッケージを更新します。古いバージョンにはWMIを多く使うことで知られるものがあります。
- 原因を取り除いたら、1回再起動します。プロバイダーホストのプロセスは必要に応じてまた起動するので、手で片付けるものはありません。
やってはいけないこと
- WMI Provider Hostを繰り返し終了しないでください。次のクエリが届いた瞬間にWindowsがまた起動し、問い合わせたプログラムはエラーを受け取って、さらに強く再試行するかもしれません。
- Windows Management Instrumentationサービスを無効にしないでください。設定のページ、Windows Update、Defender、多くのドライバーのツールがそれに依存しています。
- 高いCPU使用率のために、WMIリポジトリをリセットまたは再構築(
winmgmt /resetrepository)しないでください。これは壊れたリポジトリのための修復で、アプリが登録したプロバイダーが消えることがあります。Microsoftは、別の問題のための最後の手段としています。
Moleでできること
Mole for Windowsの「ステータス」ページには、WMI Provider Hostの各行がCPU、メモリ、I/Oとともに表示されます。行のメニューから「なぜ実行中?」を選ぶと、C:\Windows\System32\wbemにあるプログラムファイルとそれを起動したプロセスが表示されます。Windowsフォルダーから動いているため、Moleは「終了」を出しません。Mole自身も2か所でWMIのクライアントです。ノートPCの充電中、ステータスはバッテリーが満充電になるまでの時間を1分に1回以下で尋ね、Doctorは実行したときにディスクの正常性を読みます。どちらもループでは動きません。ほかの忙しい名前についてはWindowsのプロセスを解説、CPU全般についてはWindowsのCPU使用率が高いときを見てください。
よくある質問
WMI Provider Hostはウイルスですか?
正規のWmiPrvSE.exeはC:\Windows\System32\wbemにあります。ほかの場所にある同名のファイルは、Windowsセキュリティでスキャンしてください。
WMI Provider HostのCPU使用率が高いのはなぜですか?
ほかのプログラムがWMIに頻繁に問い合わせているか、重いデータを求めているためです。イベント ビューアーのWMI-Activity Operationalログに、失敗したクエリの背後にあるクライアントのプロセスIDが出ます。
WMI Provider Hostを終了または無効にできますか?
終了しても数秒しか効きません。次のクエリでWindowsがまた起動するためです。WMIサービスを無効にすると、設定、更新、ドライバーのツールが動かなくなります。
WMI Provider Hostのプロセスが複数あるのはなぜですか?
プロバイダーは別々のホストプロセスで動くため、遅いプロバイダーがほかを止めません。たいてい忙しいのは1つだけです。