Windows OSでよく見かける重いプロセス、ベスト10:Tech TIPS
Windows OSを使っていると突然システムの応答が遅くなって操作しづらくなることがある。そんな場合はまずタスクマネージャーを起動して、どのプロセスが重いかを調べるとよい。Windows OSでよく見かける“重いプロセス”をまとめてみた。
対象OS:Windows 7 / Windows 8 / Windows 8.1 / Windows Server 2008 R2 / Windows Server 2012 / Windows Server 2012 R2
解説
■記事内目次
- システムの負荷が重いかどうか調べるには?
- CPU負荷が高くなる原因は?
- 第1位:svchost.exe
- 第2位:TrustedInstaller/TiWorker/msiexec
- 第3位:MsMpEng
- 第4位:SearchIndexer/SearchProtocolHost/SearchFilterHost
- 第5位:wuauclt
- 第6位:mscorsvw/ngen
- 第7位:taskhost
- 第8位:System
- 第9位:System Idle Process
- 第10位:システムの割り込み
- 番外:rundll32
- 番外:taskmgr/perfmon
- 番外:csrss
- 番外:dwm
- 番外:makecab
●システムの負荷が重いかどうか調べるには?
Windows OSを使っていると、システムが平常時と比べて非常に“重く”なり、例えばマウスやキーボード入力などへの応答が遅くなったり、極端な場合は無応答になったりすることがある。
このような場合は、タスクマネージャーを起動してどのプロセスが重いのかを調べたり、リソースモニターやディスクのLEDランプなどを見て、ディスクの入出力などが非常に増えてシステムの負荷になっていないかどうかを調べたりすることになる(操作手順は次の関連記事参照)。
- 関連記事: TIPS「負荷の大きいプロセスを特定する方法」
- 関連記事: TIPS「リソースモニターでオープン中のファイルをモニターする」
タスクマネージャーでシステムの状態を調査する
システムが重くなった場合、その原因を探るにはまずタスクマネージャーを起動して、何が原因かを調査する。システムが重くなる原因は、CPU負荷(プロセス)やディスクの入出力負荷、その他デバイスの処理負荷が増えたためであることがほとんどである。これはWindows 8.1のタスクマネージャーの例。
(1)CPU使用率の概要。
(2)CPU使用率の詳細。これはコアごとのCPU使用率を表示させたところ。何もしていないはずなのに、定常的に高いCPU使用率が続いているようだと、何らかの問題が発生しているかもしれないし、単にバックグラウンドであらかじめ計画されたタスクやサービスが実行されているだけかもしれない。
(3)[詳細]タブ(Windows 7/Windows Server 2008 R2の場合は[プロセス]タブ)をクリックすると、プロセスごとの詳細を確認できる(後述)。
(4)CPU使用率が低くても、ディスク入出力が多い場合もシステム全体が重くなる。
(5)どのプロセスのディスク入出力が多いかは、このリソースモニターで確認できる。
CPUの負荷が高くなっていることが分かったら、[詳細]タブ(Windows 7/Windows Server 2008 R2の場合は[プロセス]タブ)に切り替えると、どのプロセスの負荷が高くなっているかを知ることができる(タスクマネージャーに[すべてのユーザーのプロセスを表示]ボタンが表示されている場合は、それをクリックして全プロセスを表示させること)。
プロセスの詳細表示
タスクマネージャーの[詳細]タブでは、プロセスの状態を詳細に表示している。Windows 7/Windows Server 2008 R2の場合は[プロセス]タブで表示できる。プロセス名を右クリックして、プロセスを終了させたり、プロセスのファイルがある場所を開いたりもできる。
(1)このタブを選択する。
(2)ここをクリックすると、CPU使用率の高い順にソートできる。
(3)プロセス名(実行ファイル名)の列。
(4)プロセスの説明の列。
またCPU負荷ではなく、ディスク入出力が多い場合は、タスクマネージャーからリソースモニターを起動して[ディスク]タブを選択すると、どのプロセスがどのファイルを多く読み書きしているかが分かり、問題解決の手掛かりとなるだろう。
リソースモニターでディスク入出力を確認する
リソースモニターを使えば、どのプロセスでディスク入出力が多くなっているか、どのファイルをアクセスしているかを簡単に確認できる。
(1)[ディスク]タブを選択する。
(2)ディスク入出力を行っているプロセスの一覧。チェックボックスをオンにすると、特定のプロセスの状態だけを確認できる。
(3)合計欄でソートすれば、ディスク入出力が多いプロセスやファイルを特定できる。
●CPU負荷が高くなる原因は?
システムの負荷、その中でも特にCPU(プロセス)の使用率が高くなる原因にはさまざまな理由が考えられる。
- 特定のプロセスのCPU使用率が、(正当な理由により)一時的に高くなった
- プログラムの不具合などにより、CPU使用率が上がった *1
- ウイルスやマルウェアなどに感染して、CPU使用率が上がった
- システムの性能が低く、わずかの負荷でもCPU使用率が上昇している
- 他
1.は、Windows OS中のある特定のプロセスだけCPU使用率が上昇することを指す。ほとんどの場合それは正常な動作であり、しばらくすればCPU使用率が下がるのであまり気にすることはないはずである。だが場合によってはずっと連続してCPU使用率が高いままのことがある。その場合は、2.の不具合によるCPU使用率の上昇や3.のウイルスなどの感染も考えられる。
*1 Windows OS内のプログラムに不具合があり、突然CPU使用率が上がるような障害は度々報告されている。最近では、例えばこの サポート技術情報(KB3053711) のように、「ユーザー名にuserという文字列が含まれているとCPU使用率が上昇する」という不具合が報告されている。その検証結果については、筆者が 弊誌のFacebookページに投稿した記事 を参照していただきたい。
とはいえ、実際にはこれらの違いを正確に判断することは簡単ではない。あるプロセスが何のためにあるのかを知らなければ、それが正常なのかどうか分からないからだ。例えばプログラムをインストールしているときはインストーラー関連のプロセスの負荷が上昇するし、入出力が多ければデバイスドライバーに関連するプロセスの負荷が上昇するのは当然である。
本TIPSでは、Windowsシステムのタスクマネージャーでよく見かける「CPU使用率が高くなっていることが多いプロセス」を10種類ほど取り上げ、その機能について説明しておく。
またそのファイルのパス情報も記しておくので、正しいファイルかどうかを判断する情報としても利用していただきたい。実行中のプロセスのパス情報は、プロセス名を右クリックしてポップアップメニューから[ファイルの場所を開く]を実行すると確認できる。
ただしあらかじめ断っておくが、タイトルとしては「ベスト10」と付けているものの、10個ちょうどというわけでもないし、その順番にはあまり意味はない(それらのCPU使用率が同時に高くなることはまずない)。
またWindows OSのバージョンやインストールしている機能、使用しているアプリケーション、適用しているService Pack、更新プログラム、緊急の修正パッチなどにも応じて大きく変わるし、不具合が解消されていたりもする。以下のランキングは多分に主観的であることをご了承願いたい。
●第1位:svchost.exe
項目 | 内容 |
---|---|
用途 | Windowsサービスのホストプロセス |
ファイル名 | svchost.exe |
場所 | %windir%\System32\svchost.exe |
これは、Windows OS中で動作している各種の「サービス」のホストとなるプロセスである。Windows OSのサービスはタスクマネージャーの[サービス]タブで確認できる。これらのサービスを最初に起動するために使われるのがsvchost.exeである。サービスの処理負荷が高くなると、このsvchostプロセスのCPU使用率の値が上昇する。
1つのWindowsシステム内でサービスは数十個動作している。それらは幾つかにまとめてグループ化され、それぞれのグループごとにsvchost.exeプロセスが1つずつ起動される。そのため、1台のシステム中には複数のsvchost.exeプロセスが存在する。以下のTIPSも参照のこと。
●第2位:TrustedInstaller/TiWorker/msiexec
項目 | 内容 |
---|---|
用途 | Windowsインストーラー |
ファイル名 | TrustedInstaller.exe/TiWorker.exe/msiexec.exe |
場所 | %windir%\servicing\TrustedInstaller.exe/ %windir%\WinSxS\以下(WinSxSフォルダの中には複数のバージョンのファイルがフォルダごとに分かれて保存されている)/ %windir%\System32\msiexec.exe、他 |
これらはWindows OSに新しいプログラムやモジュール、更新プログラムなどをインストールするために利用されるプログラムやその補助プロセスである。ユーザーによる明示的なインストールの場合だけでなく、例えばWindows Updateによる自動的なバックグラウンドでのインストール時などにも実行されている。
●第3位: MsMpEng
項目 | 内容 |
---|---|
用途 | Microsoft Security Essentialsの実行プログラム |
ファイル名 | MsMpEng.exe |
場所 | %ProgramFiles%\Microsoft Security Client\MsMpEng.exe |
これはアンチマルウェアソフトウェアであるMicrosoft Security Essentialsの実行プログラムである。システムが起動した直後から実行を開始しており、常時ファイルをスキャンして、マルウェアに感染していないかどうかなどをスキャンしている。
通常はバックグラウンドで動作しているため、ユーザーの操作にはあまり影響を与えないようになっている。しかし、インストールされているプログラムなどが多いとスキャンに時間がかかるし、負荷も高くなる。
C:ドライブの使用量が多いとMsMpEngプロセスの負荷が高くなるようである(起動後の数十分の負荷が高い)。経験上、C:ドライブの使用量を抑制するか、C:をハードディスクではなくSSDにするとかなり改善される。
MsMpEngの設定を変更してスキャンの頻度などを下げるという方法もある(次のTIPS参照)。ただし、セキュリティのことを考えるとあまりお薦めできない。
●第4位:SearchIndexer/SearchProtocolHost/SearchFilterHost
項目 | 内容 |
---|---|
用途 | Windows Search(インデックス)サービスのホストプロセス |
ファイル名 | SearchIndexer.exe/SearchProtocolHost.exe/SearchFilterHost.exe |
場所 | %windir%\System32\SearchIndexer.exe/ %windir%\System32\SearchProtocolHost.exe/ %windir%\System32\SearchFilterHost.exe |
これらはファイル検索を高速化する「インデックス」を作成するプロセスである。新しくファイルが追加や更新された場合に負荷が重くなるので、抑制したければコントロールパネルの[インデックスのオプション]で検索範囲を限定するなどの設定を行う。その手順については、次のTIPSの「対策その2:〜」が参考になる。
●第5位:wuauclt
項目 | 内容 |
---|---|
用途 | Windows Update関連のプロセス |
ファイル名 | wuauclt.exe |
場所 | %windir%\System32\wuauclt.exe |
これはWindows Update関連のプロセスである。新しいWindows Updateの更新プログラムがないかどうか、システムに適用すべきかどうかなどの判断・処理を行う。
Windows Updateの処理では、過去何度かCPU使用率が異常に上昇するという不具合が報告されたことがある。CPU使用率の上昇がWindows Updateの処理に起因するかどうかは、Windows Updateの処理(確認)を手動で開始したり、停止させたりしてチェックしてみるとよい。
なおWindows Updateで更新プログラムを適用する場合は、このwuaucltプロセスではなく、svchost.exeやインストーラー関連のプロセスのCPU使用率が上昇することがある。
●第6位:mscorsvw/ngen
項目 | 内容 |
---|---|
用途 | .NET Frameworkのオプティマイザープロセス |
ファイル名 | mscorsvw.exe/ngen.exe |
場所 | %windir%\Microsoft.NET\Framework\<バージョン>\mscorsvw.exe/ %windir%\Microsoft.NET\Framework\<バージョン>\ngen.exe |
これは.NET Frameworkを使ったプログラムの「オプティマイザー(最適化)」のプロセスである。.NET Frameworkを使ったプログラムやパッチなどをインストール/更新した直後に実行されているのがよく見受けられる。
.NET Frameworkを使って書かれたプログラム(.NETアセンブリ)は中間言語CIL(Common Intermediate Language)で記述されている。これらのプロセスは、これを事前にコンパイルしてターゲットCPUのバイナリコードに変換するという処理を行っている。
例えば開発ツールのVisual Studioをインストールした場合など、インストールされた.NETアセンブリの数が多いと処理に時間がかかる。それでも、1〜2時間もすれば終了するだろう。
●第7位:taskhost
項目 | 内容 |
---|---|
用途 | Windowsタスクのホストプロセス |
ファイル名 | taskhost.exe |
場所 | %windir%\System32\taskhost.exe |
taskhost.exeは、Windows OSの「タスク」を起動するためのプロセスである。
タスクとは、ある決まった時間やタイミング(起動時やログオン時など)に起動される処理(プロセス)のことである。タスクは[コンピューターの管理]ツールの[システム ツール]−[タスク スケジューラ]で設定、管理する。指定した時刻やタイミングになると、taskhost.exeが実際のタスクを担当するプロセスを起動するようになっている。
そのため、taskhost.exeが重くなるわけではなく、taskhostから起動されているプロセスが重くなることの方が多い。タスクマネージャーでは、起動されたプロセスはtaskhostとは別のプロセスとして表示される。
もしtaskhostのCPU使用率が高くなっているなら、それは起動しようとしたタスク側に問題があって、正しく起動できないか、もしくは何度も再起動を試行している、といったことが考えられる。
●第8位:System
項目 | 内容 |
---|---|
用途 | Windows NTカーネルシステム |
名前 | System |
PID | 4(プロセスIDは常に4) |
場所 | −(なし) |
* 【お断り】ランキングのこの辺りから先の順位は、負荷が高いプロセスというよりも、CPU使用率順に並べた場合に単に上位に来ることがあるというだけで、実際にシステムの操作性に影響を与えるほど処理の重いプロセスではないことが多い。
Systemプロセスは、Windows OSのカーネル内で実行されている処理を担当するプロセスである。次の「System Idle Process」と同様に仮想的なプロセスであり、プロセスIDは常に4で、対応する実行イメージファイルは存在しない(あえて言うなら、カーネル全体がこのプロセスに対応する)。
- インサイドMicrosoft Windows 第4版 上「2.4.7 システムプロセス」
Windows OSのカーネル内部ではさまざまなモジュールやサブシステム、デバイスドライバーなどが動作している。それらは全てこのシステムプロセス(とその内部にあるシステムスレッド)中で動作している。通常はカーネルの処理はあまり負荷が高くならず、SystemプロセスがCPU使用率の上位に出てくることはない。せいぜい数%だろう(性能の低いPCだともっと高くなることもある)。
だが、たまにデバイスドライバーなどに不具合があって、CPUを異常に占有してしまうことがある。そのような場合はSystemプロセスがCPU使用率の上位に出てきたり、ある一定のCPU使用率がずっと続いたり、といった不具合が発生することがある。
新しいデバイスやサポートプログラムなどをインストールしてCPU使用率がずっと高いままという場合は(例えば1コア分ずっと消費し続けているなど)、インストールしたデバイスに関するトラブルなどを疑ってみるとよいだろう。
●第9位:System Idle Process
項目 | 内容 |
---|---|
用途 | システムアイドルプロセス(仮想的なプロセス) |
名前 | System Idle Process |
PID | 0(プロセスIDは常に0) |
場所 | −(なし) |
プロセスをCPUの使用率順に並べた場合、常にこの「System Idle Process」というプロセスが一番上にあり、さらにCPU使用率も90%以上になっていることが多い。だがこれは仮想的なプロセスであり、実際にこのような名前(ファイル名)のプログラムがあるわけではない。
システムで実行中の全プロセスは実行用のキュー(実行待ち行例)に登録されている。実行するプロセスが1つもない場合は、仮想的にこのSystem Idle Processというプロセスが実行されているように振る舞うことになっている。
つまり、このプロセスが99%実行されているということは、実際はCPUが99%アイドル(待ち)状態であるということを表す。数値が高くても気にすることはない。
- 連載 Windows OS入門 第3回「プロセスとスレッド」
このプロセスのPID(プロセスID)は常に0である。もし0以外ならウイルスなどが偽装している可能性がある。
●第10位:システムの割り込み
項目 | 内容 |
---|---|
用途 | 割り込み処理(仮想的なプロセス) |
名前 | 遅延プロシージャ呼び出しと割り込みサービスルーチン |
PID | −(なし。プロセスID部分の表示は常に「−」) |
場所 | −(なし) |
この「システムの割り込み」も便宜上プロセスとして表示されているだけで、実際には該当するプロセス(実行ファイル)があるわけではない。このプロセスを見ると、割り込みの「遅延プロシージャ呼び出し」処理にどのくらいのCPUパワーが費やされているかを確認できる。ただしWindows 8/Windows Server 2012以降のタスクマネージャーでのみ表示される。
割り込みとは、デバイスなどから送信されるイベントトリガーであり、例えばデータの準備ができた、エラーが発生した、というような場合に、OSにそれを知らせるために使われる。
割り込み処理ルーチン内ではデバイスの状態をチェックし、データを読み出す「準備」だけして割り込み処理を完了する。実際にデータの受け取り処理を行うのは、割り込みの「遅延プロシージャ(遅延手続き)」の担当である。つまり割り込み発生時にすぐに対応するのが割り込み処理ルーチン、後でゆっくり事後処理するのが遅延プロシージャである。
システムの割り込みプロセスのCPU使用率が高くなるということは、割り込みの遅延プロシージャの処理が滞っていることを表す。性能の低いCPUではこのプロセスの処理に時間がかかるため、システムの割り込みプロセスのCPU使用率は高めになる。
またデバイスドライバーに不具合があって処理が遅くなっている場合も、CPU使用率は高めになる。この場合もデバイスドライバー周りのトラブルを疑う必要があるだろう。
●番外:rundll32
項目 | 内容 |
---|---|
用途 | Windows DLLのホストプロセス |
ファイル名 | rundll32.exe |
場所 | %windir%\System32\rundll32.exe |
これは他のDLL(例えばコントロールパネルアプレットのDLL)などを起動するために使われるホストプロセスである。このプロセスのCPU使用率が高いということは、実際には、このrundll32によって起動されているプログラムのCPU使用率が高いということである。rundll32が何を起動しているかは、rundll32プロセスに渡されているパラメーターを調べる必要がある。
ただしタスクマネージャーで見ても単に「rundll32.exe」としか表示されず、何を起動しているかの詳細は分からない。詳しく調べるには、SysInternalsの「Process Explorer」のようなツールを利用する必要がある。このツールについては、以下の記事も参照のこと。
- 連載 Windows OS入門 第3回「プロセスとスレッド」
●番外:taskmgr/perfmon
項目 | 内容 |
---|---|
用途 | タスクマネージャー/リソースモニター |
ファイル名 | taskmgr.exe/perfmon.exe |
場所 | %windir%\System32\taskmgr.exe/ %windir%\System32\perfmon.exe |
これはタスクマネージャーや、そこから起動されているリソースモニターに相当するプロセスである。自分自身を指しているものなので、この項目がCPU使用率の上位にあるからといって気にする必要はない。
●番外:csrss
項目 | 内容 |
---|---|
用途 | クライアントサーバランタイムプロセス |
ファイル名 | csrss.exe |
場所 | %windir%\System32\csrss.exe |
これはWindows OSにログオンした場合の、ユーザーセッション(ユーザーごとのプログラム実行環境)を準備するためのプロセスである。これもCPU使用率の上位にあるからといって特に気にする必要はない。
●番外:dwm
項目 | 内容 |
---|---|
用途 | デスクトップウィンドウマネージャー |
ファイル名 | dwm.exe |
場所 | %windir%\System32\dwm.exe |
これはWindowsデスクトップのマネージャープロセスである。Windows 7でいうことの、Aeroプレビューやフリップ3Dなどを実現している。CPU使用率の上位にあるからといって特に気にする必要はない。
●番外:makecab
項目 | 内容 |
---|---|
用途 | Cabinet Maker(.cabファイルメーカー) |
ファイル名 | makecab.exe |
場所 | %windir%\System32\makecab.exe |
これは.cabファイル(Windows OSでよく使われているファイル圧縮形式)を作成するためのプロセスである。例えばログファイルなどを圧縮してディスクの空き領域を広げるために使われている。大抵の場合はすぐに終わるので、CPU使用率の上位にあるからといって特に気にする必要はないだろう。
以上、Windows OSでよく見かける重いプロセスを幾つか紹介した。この内容はOSのバージョンや構成などよっても異なるので、今後必要なら随時更新する。
■この記事と関連性の高い別の記事
- Windowsで負荷の大きいプロセスを特定する方法(TIPS)
- svchost.exeプロセスとは何か?(Windows 8.1/10編)(TIPS)
- サービスのプロセスを特定する(Windows Vista編)(TIPS)
- アプリケーションに対応するプロセスを素早く発見する方法(TIPS)
- Windowsのsvchost viewerツールでsvchost.exeプロセスのサービスを調査する(TIPS)
- カーネルモードとユーザーモードの負荷状況を簡単に見分ける方法(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.