【注意喚起】Dellのゴミクズみたいなバグ入りソフトウェアを除去した

結論を先に言うと,そこそこ新しめのDell PCでWindows 7を使ってる人は,「コントロールパネル」→「ソフトウェアと機能」の一覧に "Dell KM632 Wireless Keyboard Caps Lock Indicator" があったらアンインストールした方がいいかも.

久しぶりに書く日記がこんな内容かよという感じだが,それはともかく... 会社の業務においてけっこう重要なアプリを毎日動かしてるWindows PCがなんか不調で,やっぱりDB関係がメモリ食うのはしょうがないのかねーたまに再起動しなきゃという話になってた.だが数日前に私が出くわした症状は,ずっとつないでたUSBマウスが突然認識されなくなってたり,その後再起動しようにもログオフに異常な時間がかかるとか,これはユーザ空間で単純にメモリ不足と言うよりもっと深刻なハンドルのリソース・リークじゃねーのと疑わせるものだった.WPFベースの3rdパーティ製.net用GUIライブラリを多用した内製アプリもけっこう動いてたので,こりゃGDIハンドルお漏らしじゃね? と疑い始めた.
そんで一昨日の晩,ちょっと本腰入れて見てみる気になった.そもそも(Windows標準の)タスクマネージャでプロセスごとのメモリ消費を表示させると最大でもせいぜい数百MBなのに,OS全体のメモリ消費が既に数GBってのは何かおかしい.カーネル空間関係のリークに違いない.いつもお世話になっておりますSysinternalsからツール詰め合わせをダウンロード:

タスクマネージャ強化版であるProcess Explorer*1を起動すると,あれっハンドルは大量に消費されてるけどGDIハンドル数は大したことない? 想像してたのとちょっと違った.そんでプロセスごとのハンドル数を表示すると,意外にも.net GUIな内製アプリでなく見慣れないプロセスがダントツ4万個くらいハンドルを食ってた.おい... プロセスの説明欄を元にぐぐって見つけた症例が上記の2つ.Windows全体を不安定にさせるバグ入りソフトウェアをバンドルして出荷とかDellひどいなー.これはMSから文句入っててもおかしくないね.それとも会社PCのキーボードが,KM632とかいうDell製キーボードと特に相性の悪いやつだったのかな? だとすると症状が出る人は少ないかも...
リークしたハンドルは当該プロセスを殺してもどうもならず再起動必須のようだが,私は稼働中のアプリ群の主ユーザじゃないので特に再起動もせず放置した.それでも1日経った金曜夕方に「なんかこのPC安定したね」というお言葉をいただけたので根源を断ったと言えそうだ.

WINDOWS SYSINTERNALS 徹底解説 (Microsoft Press)

WINDOWS SYSINTERNALS 徹底解説 (Microsoft Press)

あーあCommon Lispで実装してたらこんなことにはならなかった かもしれない のに!! #ステマ #ステルスになってねぇ


On Lisp
Paul Graham著 野田開訳

*1:なおProcess Monitorは strace(1) 的な全く別アプリ.