見出し画像

トラブルシューティング

25年もこの仕事をやってると納品したソフトの不具合報告を受けても少々の事なら動揺することはないが、「連続稼働中に落ちた系」の報告を受けると心穏やかではいられない。なぜなら再現性が全然なかったり、原因の特定が凄く難しかったり、とにかく痛い目にあった記憶しかないからだ。しかし今回は意外とあっさりと解決できたので、ここに記録しておく。

週末に連続稼働試験をしていたソフトが月曜日にチェックすると落ちていた。幸いにもエラーログは残っていて「クォータが不足しているため、要求されたサービスを完了できません。」というメッセージを残して死んでいた。「クォータ」という文言からディスクの容量不足を疑い、空き容量を確認したが全然OK。ではメモリかと思いチェックするとメモリは確かにギリギリの状態だった。でもアプリは落ちてるのにそのまま?他のアプリを確認しても極端にメモリを消費しているアプリが見当たらない。どういうことなの? 

しばらく悩んでいるとタスクマネージャーのパフォーマンスタブに表示されている「非ページプール」の使用量がかなり大きいことに気づいた。直観的にこれはデバイスドライバだなと思った。非ページプールは割込みやDMAで常に物理メモリ上で処理する必要がある場合に使われるからだ。

原因のあたりは付けられたが肝心の「どのデバイスドライバが犯人?」かがまだ分からない。タスクマネージャーではアプリのメモリ使用量しか分からず、自分のアプリもデバイスドライバを使用しているのでまだ無罪放免にはさせてもらえない。

てなわけでネットで情報を漁っているとpoolmonというそのものずばりなツールを見つけた。でもMicroSoft製のこのツール、それ自体は29KBしかないのに、これをゲットするためSDKからDDKまで何ギガバイトもインストールしないといけないのに閉口した。あとプールが4バイトの「タグ」でしか識別できない。pooltag.txtに記載されてない野良デバイスドライバだとこの4バイトしか手がかりが無いのでなかなかに厳しい。

色々と寄り道をしたがpoolmonを使って調べていくと評価に使用していたネットワークキャプチャドライバが犯人だということが分かった。これにてようやく無罪放免。しかし冒頭で「意外とあっさりと解決した」とか書いたが、これは当社比であって、真っ直ぐにこのデバイスドライバ犯人説にたどり着けたわけでは無いし、やっぱり「連続稼働中に落ちた系」は消耗するなと思った。






この記事が気に入ったらサポートをしてみませんか?