« ムービーコデック | メイン | SQLiteのトランザクション »
2006年02月11日
mixi Alert 開発日誌:: ブルースクリーン
Tweet @jin1016をフォローWindows XPでmixi Alertを使い始めてから1・2週間経った頃から時々フリーズしたり、青画面が表示されたりするようになったと言う記述を見かけた。
フリーズしたり、青画面になるような不具合は致命的だ。
普通のWindowsアプリケーションで青画面を表示するようなプログラムを組む方が難しいと思うのだが、そうでもないのだろうか?
なんにしても、対策しないといけないと言うことで情報を集めることにした。
やっかいなことに、自分の環境ではまったく発生していないので、全然気付かなかった。
でも、4件ぐらい情報が得られたことから、それなりに発生するようではある。
いったいなぜ発生するのか謎だったのだが、青画面になった時のスクリーンショットを得られたことで一気に解明に向かった。
青画面でのエラーは、IRQL_NOT_LESS_OR_EQUALだった。
そこで、IRQL_NOT_LESS_OR_EQUALについていろいろと調べる。
IRQL_NOT_LESS_OR_EQUALについては、偽偽夜食日記 - IRQL_NOT_LESS_OR_EQUALに詳しい解説があった。
ドライバの不具合のようだ。
当然のことながら、mixi Alertはドライバではない。
ググった他のページなどを見てみると、メーカー製パソコンで発生したと言う記述も多い。
自作マシンより、メーカー製パソコンを使っている人の方がドライバのアップデートは少なそうだから、そういう人の方がよく目にするのかもしれない。
自分の周りからこの問題の話を聞かなかったのはその辺りが関係しているかもしれない。
そして、次のような発生傾向があるようだ。
・CPUが過負荷状態になると発生しやすくなる。
・メモリアクセスが多いと発生しやすくなる。
・セキュリティーソフトが入っていると発生率が高くなる。
上のリンクの解説から考えると、DPC/ディスパッチレベル以上のレベルでページ可能メモリにアクセスしてしまっているドライバがあり、その付近でメモリがアクセス過多になるとページフォルトが発生し、スケジューリングも発生、IRQL_NOT_LESS_OR_EQUALでブルースクリーン。
と言った流れだろうか。
CPUが過負荷状態と言うのは、メモリアクセスが多くてスワップなどが発生し重いから過負荷状態だと思ったしているのかもしれない。
後、セキュリティーソフト云々は、メモリを監視するセキュリティーソフトによってメモリアクセス過多が発生と言うことのようだ。
また、IRQL_NOT_LESS_OR_EQUALの発生はハードウェアの不具合の可能性もあるとか。
で、対策としては、memtest86、もしくはmemtest86+でメモリをチェックしたり、ドライバを最新のものにすることだ。
最新のドライバにしてもまだ不具合があるかもしれないけど。
そもそも、なぜmixi Alertでこの問題が表出したのだろう?
Process Explorerでmixi Alertを見てみると、Page Faultsが妙に多い。
その辺りが原因か。
でも、なぜPage Faultsが多いのだろう?
mixi Alertは常駐型でずっとアクティブじゃない。
定期的にWebにアクセスする。
その間隔は分単位。
つまり、1回使った後しばらく使わないからページアウトが行われやすいのかも。
ところで、ページ可能メモリじゃないメモリとかってどこだろう?
どこかドライバ用に用意されているのかな?
投稿者 Takenori : 2006年02月11日 13:48
comments powered by Disqus