サービスホスト(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)を公開しておらず、サードパーティがサービスホストを使用したサービスを開発することは現時点では出来なそうです。
Windowsプロセスの詳細解説本はこちら↓
公開日時:2014年05月31日 21:19:54
最終更新日時:2024年01月17日 18:59:07