2008年01月27日
川俣晶の縁側ソフトウェア技術雑記 total 9085 count

無駄にハンドルをガバガバ確保してシステムに過剰な負担を掛けるのはどいつだ!?

Written By: 川俣 晶連絡先

 システム(Vista Ultimate)が異様に重くなって、調べてみるとハンドル数が異様に増えていていることが判明。OneCareのチューンナップの関係かと思ってキャンセルを行ってもキャンセルが効かず。しょうがないので再起動してから、作業を始める前の状態でハンドル数を調べると……。

まだ作業を始めてすらいないぞ

 ワーストワンはハンドル数4455って、それは多すぎでしょ!

 mysqld-nt.exeというのは、オープンソースのMySQLだと思います。さて、オープンソースもSQLも嫌いな私がなぜこのようなプロセスを走らせているのかというと、実は上から5番目のAdobe VersionCue CS3の下請けとしてインストールされているからです。VersionCueというのは、Adobeの世代管理ソフトで、Visual SourceSafe、RCS、CVSなどの仲間です。ファイルの履歴を取って過去の状態に戻せるものです。実際に使っていて、出来が良いとは思えませんが、それでもあると便利。複数のマシンから1つのドキュメント プロジェクトを簡単に参照して扱え、変更履歴も残ります。なので、これらのソフトが自分のマシン上で動いていることはリーズナブルと判断していましたが……。

 それにしても、ねぇ。

 mysqld-nt.exeとAdobeVersionCueCS3を足すと、確保したハンドル数は約5600にも達します。Adobeさん、これはあまりにシステムを圧迫しすぎでは?

 ちなみに、MSのSQL Serverと思われるsqlservr.exeも動いていますが、これが消費しているハンドルは558でしかありません。4455と比較すればまさに2倍や3倍ではなく桁違い。

感想 §

 現在の私のシステムが抱えているある種の不安定さの原因がどこにあるのか、まだ切り分けられていません。今時のパソコンソフトは勝手にいろいろなプロセスが常駐してしまうので、簡単には判断が付きません。

 今日は、たまたまハンドル数をチェックしたので意外なソフトが多くのハンドルを確保していることに気付きましたが……。

 おそらく、これが問題の原因ではないでしょう。

 表題の「無駄にハンドルをガバガバ確保してシステムに過剰な負担を掛けるのはどいつだ!?」の結論は、実はmysqld-nt.exeではありません。もっと確保してしまうソフトが他にあるはずです。次に現象が起きたときに調べてみましょう。

追記 §

 その後の調査で、「KB933245 その Windows Media Player 11 が Windows Vista でのオーディオ ファイルを再生する度、 Lsm.exe のハンドル リークが発生することがあります。」の問題そのものであることが確認されました。

 ちなみに何が問題なのかというと以下のようなパターンが繰り返されるからです。

  1. OneCareのチューンナップが始まる
  2. チューンナップ中はシステムが少し重くなるので、はやく終わって欲しい (しかし、ファイルが多いので数日かかる)
  3. 仕事をしながらMP3ファイルを流している
  4. ハンドルがリークしてシステムが重くなっていく
  5. 重いから再起動したいのに、チューンナップ中だからできない
  6. 重さが限界を突破して再起動を決意する
  7. 再起動するとチューンナップは最初からやり直し (振り出しに戻り無限に繰り返す)