最近、あるアプリケーションだけが起動にとても時間がかかることに気づきました。タスクマネージャーで見てみると、起動してしばらくは動作しますがすぐにCPU利用率が0%・ディスクの使用率も0%のまま40秒くらい停止し、その後何事もなかったかのように再度動作して起動する、という動作でした。動作から見ると、明らかに何かのタイムアウトを待っているように見えるのですが、起動時に何かの通信をするアプリケーションではないと思われるため、何を待っているのかがわかりませんでした。
この問題について、タスクマネージャーの機能を利用することで原因を見つけることができました。タスクマネージャーの「詳細」タブには実行中のプロセスが表示され、右クリックでいくつかの操作を実行できます。この右クリックのメニューの中にある「待機チェーンの分析」を実行すると、何かを待って動作できない場合に、関係するプロセスを確認できます。
今回の場合は、「spoolsv.exe」が原因となっていることが表示されました。これは「Print Spooler」のサービスの実行プロセスで、プリンタの制御を行います。ここで、原因がわかりました。Windowsの既定のプリンタになっているプリンタはネットワークプリンタで、該当の環境では利用できないプリンタでした。そのため、そのプリンタの情報を取得できず、タイムアウトするまで待っていたのです。
この「待機チェーンの分析」の機能は知らなかったので、他の道具であるイベントビューアやプロセスモニタなどさまざまな道具を使って調査し、原因がわからず苦労していました。