事例概要
約 1 か月の連続運転後にだけ突然落ちる Windows アプリについて、観測点の整理から始めて、最終的にハンドルリークを中心とした調査へ絞り込んだ事例です。 ポイントは、原因そのものだけでなく、どの観測を先に整えるべきか を決めたことにありました。
症状
- 数日では出ず、長期稼働後にだけクラッシュする
- 例外の出方だけではリークかどうか判断しにくい
- 現場でしか起きず、開発機では再現圧縮が必要
制約
- 月単位の再現待ちは現実的ではない
- カメラ再接続や異常経路を含むため、正常系ログだけでは足りない
- どのリソースが増えているかを継続観測できる必要がある
何を観測したか
Handle Count、Private Bytes、Thread Countの heartbeat- セッション開始・再接続・終了の境界ログ
create/open/registerとclose/dispose/unregisterの対になるライフサイクルログ
どう切り分けたか
まず「長期稼働クラッシュ」をそのまま追わず、再接続や timeout まわりの失敗経路へ再現を圧縮しました。 その結果、メモリリークよりも ハンドルリーク を疑う方が筋が良いと判断でき、観測をそこへ集中できました。
どう改善したか
- 監視項目を増やし、クラッシュ時点だけでなく増加傾向を追えるようにした
- 境界ログを整えて、どの責務が開いてどの責務が閉じたかを追いやすくした
- 後続の異常系テスト基盤へつなげやすい形に調査結果を整理した
この事例がつながるサービス
この事例は、長期稼働後だけ出る障害を切り分ける 不具合調査・原因解析 と、ログ・再接続・運用観測を実装側から整える Windowsアプリ開発 の両方へつながります。