svchost.exeプロセスとは何か?(Windows 8.1/10編):Tech TIPS
システムの負荷が高い場合によく見かけるsvchost.exeプロセス。これはサービスを起動するための親となるプロセスなので、その中で動作しているいずれかのサービスが高負荷の原因と考えられる。
対象OS:Windows 8/Windows 8.1/Windows 10/Windows Server 2012/Windows Server 2012 R2
解説
svchost.exeプロセスのCPU負荷が高い!?
Windows OSを使っていると、時々システムが非常に重くなり、タスクマネージャーなどで確認すると、「svchost.exe」というプロセスのCPU負荷が高くなっていることがある。このsvchostとは何か、ウイルスではないのか、そうでないなら何をするものなのか、高いCPU負荷になっても問題ないのか、などが気になるだろう。本TIPSでは、svchostとは何かについて解説する。
タスクマネージャーでシステムの高負荷の原因を探る
Windowsシステムの負荷が急に高くなったので、タスクマネージャーで確認すると、svchostというプロセスが原因のことがある。これは何のためのプロセスなのだろうか?
なお対象となるOSはWindows 8.0/Windows Server 2012以降とする。Windows 7やWindows Server 2008 R2以前のWindows OSのsvchostについは、以下の記事を参照していただきたい。これらのWindows OSではタスクマネージャーの機能や外観などが異なるため、少し操作/確認方法が異なっている。
- TIPS「Windowsのsvchost.exeプロセスとは?」
- TIPS「サービスのプロセスを特定する」(Windows Vista/Windows 7/Windows Server 2008/Windows Server 2008 R2対象)
- TIPS「Windows OSでよく見かける重いプロセス、ベスト10」
重いプロセスをタスクマネージャーで確認する
svchostの解説の前に、どのプロセスが重いのかを調べる方法を紹介しておく。
WindowsシステムのCPU負荷が高い場合、どのプロセスが重くなっているか、何が原因かを調べるには、「タスクマネージャー」を利用するのが一般的である。タスクマネージャーは[Ctrl]+[Shift]+[Esc]キーを押すか、タスクバー上で右クリックし、ポップアップメニューから[タスク マネージャー]を選択すると起動できる。
タスクマネージャーの初期状態では「簡易表示」モードになっているので、画面下にある[詳細]リンクをクリックして、「詳細表示」モードに切り替え、「プロセス」タブか「詳細」タブを選択する。
タスクマネージャーで重いプロセスを確認する
タスクマネージャーを詳細表示モードに変更すると、システムの負荷が高い原因を特定できる。もし「サービスホスト:〜〜」というプロセスの負荷が高いなら、Windows OSの「サービス」がその原因と考えられる。
(1)タスクマネージャーが簡易表示になっている場合は、このリンクをクリックして詳細表示に切り替える。
(2)「プロセス」タブを選択する。
(3)ここをクリックして、名前順にソートする。
(4)ここをクリックすると、CPUの負荷の高い順または低い順に表示できる(クリックするたびに切り替わる)。
(5)「サービスホスト:〜〜」はWindows OSのサービスを実行するためのプロセス。通常は複数表示される。
(6)このサービスによって、CPUの負荷が高くなっている。
(7)もっと細かくプロセスの状態を見るには、「詳細」タブを選択する。
(8)サービスに関する情報はこの「サービス」タブでも確認できる。
「svchost.exe」プロセスとは?
タスクマネージャーの「プロセス」タブで見ると、「サービスホスト: ローカル システム」という項目のCPU使用率が高くなっていることがある(上の画面の(6)。Windows Updateの実行中に高くなることが多い)。これは実際には「svchost.exe」というプロセスのCPU使用率を表している。
svchost.exeとは、Windows OSの「サービス」を実行するためのプロセスのことである。これはウイルスではないし(右クリックして[ファイルの場所を開く]でフルパスが「%windir%\System32\svchost*.exe」であることを確認しておくこと)、複数のsvchost.exeが存在するのも正常な動作である。状況によってはこのプロセスのCPU使用率が高くなるのは、Windows OSではよくあることである。
Windows OS内では多数のサービスが実行されており、その一覧はタスクマネージャーの「サービス」タブ(上の画面の(8))や、管理ツールにある「サービス管理ツール」(サービス管理ツールは、「サービス」タブ画面からも起動できる)、もしくは「tasklist /svc | find /v "N/A"」コマンドなどで確認できる。
サービスの実体となるプロセスはいくつかあるが、svchost.exeは汎用のサービスホストとして、多くのサービスで利用されているプロセスである。例えばlsass.exeやSearchIndexer.exeといったサービスプロセスは通常1つしか実行されていないが、svchost.exeは複数起動している。svchost.exeが親プロセスとなって、OS内の各種サービスをホストし、実行する。
Windows OSでは通常、数十〜数百のサービスが定義されている。OS起動時にはそのうち100個程度のサービスが自動起動し、それ以外のサービスは必要に応じて自動的に起動や停止、終了するようになっている(サービスの数はOSのバージョンやインストールしているアプリケーションなどによって変動する)。
ただしサービス1つにつき、svchost.exeが1つずつ存在するのではなく、1つ、もしくは複数のサービスをまとめてグループ化し、そのグループごとに1つのsvchost.exeが割り当てられている。
タスクマネージャーの「プロセス」タブを見ると、「サービスホスト:〜〜」というプロセスが複数動作しているが、これがサービスをホストしているsvchost.exeプロセスである。それぞれのプロセスの中には1つ、もしくは複数のサービスが存在している。各プロセス内でどのサービスが動作しているかは、タスクマネージャーの「プロセス」タブ画面で左側にある[>]のマークをクリックすると展開され、分かるようになっている。
なお、停止中のサービスはここには現れない。サービスを起動すると、適切なsvchost.exeプロセスの中へロードされ、実行が始まる。
タスクマネージャーの「プロセス」タブでサービスの詳細を調査する
svchostのプロセスを展開すると、そこに含まれるサービスの一覧を確認できる。
(1)「サービスホスト:〜〜」の左側にある[>]のマークをクリックして展開する。
(2)このプロセス内で実行中のサービス。このプロセスのCPU負荷が高い場合は、このうちのどれかのサービスが原因と考えられる。
(3)括弧内は、このsvchost.exe内で実行されているサービスの数を表す。1つしかない場合は表示されない。
(4)ここからサービスを停止することもできる。ただし停止するとこの一覧から消えるので、再度起動するには「サービス」タブかサービスの管理ツールで開始する必要がある。
(5)この辺りを右クリックして、ポップアップメニューから[コマンドライン]を選択するとこれが表示される。サービスを起動するためのコマンドとそのパラメーターが表示される。
(6)サービスはこのようなコマンドラインで起動されている。
(7)このプロセス(各サービス)が使用しているCPUやメモリ、ディスク、ネットワークトラフィック量。これらの値から、システムに負荷を与えているサービスを判断できる。
上の画面の「コマンドライン」((5))のところに記述されているのが、サービスを起動するためのsvchost.exeプロセスの実行パスとパラメーターである。例えば上の画面には「サービス ホスト:ローカル サービス」というプロセスがあり(コマンドラインは「svchost.exe -k LocalService」)、その中では8つのサービス((2))が実行されている。右側に表示されているCPU使用率の値は、このsvchost.exeプロセスのCPU使用率であり、各サービスがそれぞれ何%使用しているかは分からない。
もしCPU使用率の高いsvchost.exeプロセスがあるなら、その中で実行されているサービスのどれかがCPU負荷を高くしていると判断できる。ただしどのサービスが原因かは分からないので、その場合は1つずつサービスを停止してみるなどすれば、判断できるかもしれない(ユーザーが勝手に停止してもよいサービスはあまり多くないが)。
サービスのグループ分け
どのサービスがどのsvchost.exeの中で動作するかは、サービスの設計者が決めることである。一般的には、同じ用途のサービスや、同じ権限で動作するサービス、同時に利用されるサービスなどが同じグループにまとめられている。サービスのグループ名と、そこに含まれるサービスの一覧は、以下のレジストリで定義されている。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
実際のレジストリは次のようになっている。
サービスを定義するためのレジストリ
各サービスは幾つかのグループに分けられて、起動するように設計されている。
(1)サービスのグループを定義するレジストリキー。
(2)SvcHostキーの下にサービスのグループが定義されている。
(3)サービスのグループ名。グループごとに、独立したsvchost.exeプロセスが割り当てられ、実行される。
(4)グループに含まれるサービス。
(5)netsvcグループの例。この中には50個以上のサービスが含まれている(Windows 10の場合)。ただしそれらのサービスが全て同時に実行されるわけではなく、自動起動するかしないかは、サービスごとに個別に設定する(サービスの管理ツールの「スタートアップの種類」で設定できる)。
この例では、「netsvcs」というグループ(タスクマネージャーでは「サービス ホスト:ローカル システム」と表示されているグループ)には、「CertPropSvc」「SCPolicySvc」「lanmanserver」……という値が含まれている。これらが個別のサービスに相当する。
サービスの管理ツールで例えば「lanmanserver(Server)」というサービスを起動したり、停止させたりすると、このプロセスの下に表示されている「Server」というサービスの項目が表示されたり、消えたりする。
「サービス名」と「サービスの表示名」の対応はサービスの管理ツールで確認できる。
サービス管理ツールでサービスの詳細を確認しているところ
サービスの名前や説明、スタートアップ種別などは、サービスの管理ツールで確認できる。管理ツールは、タスクマネージャーの「サービス」タブから起動できる。
(1)サービス管理ツールで表示されているサービス一覧から1つ選んでダブルクリックすると、その詳細を確認できる。
(2)サービス名。これが先ほどのレジストリに記録されていたサービス名になる。
(3)サービスの表示名。人が分かりやすいように付けられたサービスの名前。
(4)サービスの説明。
(5)サービスを起動するためのコマンドライン。このサービスは「netsvc」グループに属していることが分かる。
(6)サービスの起動設定。[自動]になっていると、Window OSの起動時に自動的に起動する。
(7)サービスを手動で開始したり、停止したりするには、これらのボタンをクリックする。
実際の各サービスは、以下のレジストリで定義されている。
HKLM\SYSTEM\CurrentControlSet\services
■この記事と関連性の高い別の記事
- サービスのプロセスを特定する(Windows Vista編)(TIPS)
- Windowsのsvchost viewerツールでsvchost.exeプロセスのサービスを調査する(TIPS)
- Windowsのsvchost.exeプロセスとは?(TIPS)
- Windows OSでよく見かける重いプロセス、ベスト10(TIPS)
- netstatでリッスンしているプロセスを特定する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.