PCの動作が遅い場合のチェックポイント(svchost編)

今回は前回に引き続き、PCの動作が遅い場合のチェックポイントに関してです。svchost.exeは「共有」されているので注意が必要です…というお話です。

svchost.exe

前回の内容に基づいて調査をした結果「svchost.exe」というプロセスがPCの動作が遅い原因だとわかった場合には特別な対応をしなければいけません。まず、タスクマネージャーを起動してプロセス一覧を眺めてみればわかりますが、svchost.exeというプロセスは多数存在します。

image

私の環境では11個のsvchost.exeが動いていました。

これらの見分け方ですが、同じプロセス名であっても「PID」はそれぞれ一意な値を持っていますのでそれで見分けることが出来ます。ここまでは良いのですが、実はsvchost.exeは通常1つのプロセスで複数のサービスを担っているのです。なので、単一のsvchost.exeが暴走しているような場合でも、それがどのサービスによって引き起こされているのかはすぐにはわからないのです。

ちょっと説明しないと何のことを言っているのかわからないと思いますのでもう少し説明しますね。

サービスとプロセスの関係

まず、通常のサービスは、単一のexeに紐付いていて、プロセスも独立した1つのものとなります。例えばPrint Spoolerサービスを見てみましょう。

image

Print Spoolerサービスの実体は「C:\Windows\System32\spoolsv.exe」です。この実行ファイルがスタートアップの種類が「自動」に設定されているので、Windowsサービスによって自動的に実行されます。その結果、プロセスとしてspoolsv.exeが起動します。

サービスも1つ、実行ファイルも1つ、プロセスも1つ。シンプルですね。

このようにシンプルではないのがsvchost.exeなのです。ここでは例としてDHCP ClientサービスとWindows Event Logサービスを見てみましょう。

image image

上記のDHCP ClientサービスとWindows Event Logサービスはどちらも実行ファイルがC:\Windows\system32\svchost.exeになっています。svchostはその名の通り、サービスをホストするためのプロセスなのですね。そしてこれらは同じプロセス上でまとめて管理されています。

このことはコマンドプロンプトで「tasklist /svc」を実行することで確認できます。

image

どちらもPID620のsvchost.exeによって動作しています。もっと言うと他にもAudiosrv, lmhosts, Wcmsvc, wscsvcというサービスも同じプロセス上で動作していますね。なので、PID620のsvchost.exeが異常にリソースを消費しているような場合でもそれが具体的にどのサービスのせいなのかはすぐには判別できないわけです。

切り分けるためには同じプロセス上でホストされている別のサービスを停止、あるいは無効化してみて、症状がおさまるか…という方法もありますが、別の方法としてはプロセスを分離してしまうという方法もあります。

svchostプロセスの分離

svchostプロセスを分離するにはサービスの構成を変更します。具体的には「sc config」コマンドでtypeをownに設定します。以下の様な感じです。

sc config Dhcp type= own

上記のコマンドではDhcpサービスがサービス自身を単一のプロセスで立ち上げるように構成しています。このコマンドを実際に実行したあとでOSを再起動すると、Dhcpサービスのプロセスが分離されたことを確認することが出来ます。

image

image

上記のようにDhcpサービスが独立したsvchost.exe上で1つのサービスのみが動作するように変更された事が確認できます。再起動してますのでPIDも変化していますが、この状態であればPID 1552のプロセスがリソースを異常に消費しているようなことがあれば間違いなくDhcpサービスの仕業である…ということで確定させることができるわけです。

また、svchostプロセスが異常にクラッシュしてしまってそのプロセスの上で動作しているすべてのサービスがまとめて停止してしまう…というようなケースでもその原因になっているのは単一のサービスであることがほとんどなので、このようにプロセスを分離しておけば「ほかのサービスのせいで重要なサービスが異常停止してしまう」というようなトラブルを回避できるというメリットもありますので、覚えておいて損はないです。

このようにsvchostは「共有」されているので問題を絞り込むために「分離」させることが有効です。

子供3人。家族優先。都内SIer勤務。Windows系中心のインフラよりの何でも屋。脱原発。 Microsoft MVP for Cloud and Datacenter Management.

コメントを残す

メールアドレスが公開されることはありません。