svchostとは
svchost.exeはサービスを提供する実行ファイル、サービスとはユーザがサインインしていなくてもバックグラウンドで動いているプロセス。Windows10のCreators Update (version 1703)からサービス1つにつき1プロセスで起動(分割サービス)するようにしたため多くのサービスがタスクマネージャなどに表示される。ただしこれは常に行われるわけではなくメモリのサイズが3.5Gより大きければ分割サービスになる。3.5G以下の場合は以前のWindowsのようにサービスがグループ化される。グループ化といってもすべてのサービスが1つのプロセスで実行されるわけではなくある程度は分けられる。
分割サービスによりいくつかの利点がある。
- プロセスで分けられているため1つのサービスに不具合があってもだのサービスに影響しない。
- 特権などはプロセスごとに持つため設定しやすくなる。
- CPUの使用率を制限するときもプロセス単位なのでやりやすくなる
ただし、プロセスをたくさん起動するとメモリ効率は悪くなるので、ここでは分割サービスになっているシステムをグループ化に戻す方法を紹介する。
分割サービスの状態:多くのサービスがある
8Gでサービスをプロセスに分けるように設定
レジストリキー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SvcHostSplitThresholdInKBの値を8Gで設定する。実際の値はキロバイトなので、8388608になる。( = 8 * 1024 * 1024 )
再起動すると反映される。
サービスがグループ化される
サービスがグループ化されてsvnchost.exeの数が減った。
プロセスが実行しているサービスを確認する
Process Explorerでできる。svchost.exeをダブルクリックしてから’Services’タブを表示すると以下のようにサービスの一覧が表示される。
参考リンク
Changes to Service Host grouping in Windows 10
[Windows 10 Fix] Why Too Many Svchost.exe (Service Host) Process Running in Task Manager