このエントリーをはてなブックマークに追加

サービスホスト(svchost.exe)とは

対象プロダクト:Windows 8.1
カテゴリー:Windowsプロセス

サービスホストの役割

サービスホスト(svchost.exe)はサービスコントロールマネージャー(services.exe)の子プロセスとして生成される、「Windowsサービスのホストプロセス」であり、さまざまなサービスをホストする「共有サービスプロセス」としての役割を持っています。

サービスホストは何故必要か?

Windows 2000 より前は、サービスは1つ1つが実行ファイル(EXE)でした。
しかし、1つのサービスがプロセス単位で実行されている場合、サービスが増えれば増えるだけシステムのリソースを多く消費し、リソースを圧迫します。
そのため Microsoft は Windows のサービスをリソース面や再利用性のために EXE ではなく DLL ファイルとして移行し始めました。
しかし、Windows は直接 DLL ファイルを実行できないため、(DLL ファイル自身は実行できません)DLL をロードするためのプロセスが必要となり、それがサービスホストです。
従って、サービスホストは Windows サービスの DLL 化(サービス DLL)のために必要になったプロセスと言えます。

また、svchost.exe (サービスホストのプロセス)は複数のインスタンスで実行されます。
Microsoft はサービスホストについては多くの情報を開示していませんが、恐らく複数のインスタンスでグループ単位でサービスをホストする事で、負荷分散や特定のサービスのメモリリーク、クラッシュ等の発生によるシステムへの影響を軽減させる(リスク分散)役割を持っているものと推測できます。
svchost.exe のインスタンスが1つのみの場合、もし特定のサービスにより svchost.exe がクラッシュした場合に、すべての Windows サービスが停止し、Windows 自体がクラッシュしてしまいます。

サービスホストを使用しているサービスを調べる

実際、svchost.exe は複数のインスタンスが作成され、各インスタンスは特定のサービスのグループをホストしてます。
svchost.exe を使用しているサービスは以下のように「tasklist /svc」コマンドで確認できます。
>tasklist /svc

イメージ名                     PID サービス
========================= ======== ============================================
...
svchost.exe                    392 Audiosrv, Dhcp, EventLog,
                                   HomeGroupProvider, lmhosts, Wcmsvc, wscsvc
svchost.exe                    520 AudioEndpointBuilder, CscService,
                                   DeviceAssociationService, hidserv,
                                   NcbService, PcaSvc, SysMain, TrkWks,
                                   UmRdpService, WdiSystemHost, WlanSvc,
                                   wudfsvc
svchost.exe                    620 Appinfo, AppMgmt, BITS, Browser,
                                   CertPropSvc, gpsvc, iphlpsvc, LanmanServer,
                                   ProfSvc, Schedule, SENS, SessionEnv,
                                   ShellHWDetection, Themes, Winmgmt
svchost.exe                    424 bthserv, EventSystem, fdPHost, FontCache,
                                   netprofm, nsi, WdiServiceHost,
                                   WinHttpAutoProxySvc
svchost.exe                   1188 CryptSvc, Dnscache, LanmanWorkstation,
                                   NlaSvc, TermService
...
例えば「TermService」はサービスのプロパティでは実行ファイルのパスは以下のように指定されています。

C:\WINDOWS\System32\svchost.exe -k NetworkService

※「-k」のオプションはサービスグループを示します。

そして、 レジストリ(regedit.exe)の

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost

には、NetworkService の値として以下が登録されています。
CryptSvc
nlasvc
lanmanworkstation
NapAgent
WinRM
WECSVC
DNSCache
Tapisrv
DHCP
TermService

svchost.exe の CPU 使用率が 100% になった場合の対処方法

上述したように、svchost.exe は複数インスタンスで起動され、共有サービスであるため、同じ svchost.exe を使用しているサービスの内の1つがクラッシュしたりハングアップ(応答しない状態)すると、その svchost.exe を使用している他のサービスも影響を受けます。
例えば、上記のコマンド結果のように「TermService」(リモートデスクトップのホストサービス)も svchost.exe を使用しているため、このプロセスがハングアップすれば、リモートデスクトップ接続に問題が発生する可能性があります。

もし何かのサービスの処理により、svchost.exe の CPU 使用率が100%の状態が継続している場合は、[タスク マネージャ] の [プロセス] タブから該当の svchost.exe(「サービス ホスト」という名前で表示されています)を一旦終了してみるのも1つの手です。
この時注意するのは、同じ svchost.exe を使用している他のサービスも影響を受ける事です。
従ってこれは解決策というよりも、システムが高負荷状態でシステムの再起動操作にも支障がある場合に、シャットダウン操作の前に、一時的に高負荷状態を解消するための手順として使用すべきでしょう。
但し、svchost.exe を停止する事でシステム自体が停止する場合もあるため、最後の手段という事になるでしょう。

なお、先に述べたように、Microsoft はサービスホストの詳細な実装(API)を公開しておらず、サードパーティがサービスホストを使用したサービスを開発することは現時点では出来なそうです。

公開日時: 2014年05月31日  21:19:54

このエントリーをはてなブックマークに追加
Hyper-V Server 2012 の環境を構築する | サービスコントロールマネージャー(services.exe)とは

Windows技術情報の一覧に戻る

「Windowsプロセス」に関する他の技術情報
技術情報のカテゴリ

このページのトップに戻る