svchost (netsvcs, wuaueng)の暴走 (Windows 7)

svchostが暴走して1コアを掴んだまま放さない。ネットワークアクセスもディスクアクセスもなく、CPUだけを消費している状態。
タスクマネージャでコマンドラインを表示するとsvchost.exe -k netsvcsとなっている。
これだけでは判らないのでProcessExplorerでThreadsを確認したところ負荷をかけているのは wuaueng.dll!DllInstall と判明した。*1

つまりWindows Updateが犯人で、前述の通りディスクもネットも使っていないので暴走していると見ていいだろう。
コントロールパネルでWindows Updateを起動すると更新がある状態だがタスクバーには通知がない。ちなみに更新確認のみでダウンロードはしない設定となっている(作業中にダウンロードが始まるとパフォーマンスが劣化して邪魔なため)。
net stop wuauserv でサービスを止めると治まるが、net start wuauserv で再開すると当然のように元の状態に戻ってしまう。
そうしているうちにWindows Updateが起動するものの動作しなくなってしまった。タスクマネージャよりsvchost.exe -k netsvcsを止めたところ復活*2Windows Updateから更新をインストールして言われるままに再起動した。

対処法(対症療法)

その後も更新があるときに症状が出るのだが、出ないときもある。
暴走した時はWindows Updateのサービスをとめておき、作業終了時にサービスを起動してから更新をインストールしている。
とはいえダウンロードが0%のままなかなか動かないことが多いのだが。そのまま1時間くらい放置し、それでもダウンロードしていない場合はそのまま電源を切っている。
0%と表示しつつもダウンロードが多少完了していて1,2個更新をインストールできる場合もあるが、起動すればまた暴走しているのでインストールが全部終わるまでその繰り返しだ。

*1:明示的に管理者権限で起動しないと見えない。ここで当該スレッドを選んでSuspendを押せばCPUの問題「だけ」は解決する。真実暴走しているならばスレッドを一時停止しても悪影響はないはずだが、同じプロセスの別スレッドによって停止解除される可能性はある。

*2:プロセスは勝手に再起動する。