ハンドルリーク
参照カウントやハンドルカウントの数え違いなどにより、不要になったハンドル(ファイル・イベント・スレッド・GDIオブジェクト・アクセストークンなどカーネルオブジェクトへの参照)が解放されずに積み上がっていく状態。
- 概念URI
https://comcomponent.com/knowledge/handle-leak/
- 別名・表記
- Handle Leak
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- Application Verifierをハンドルリークに用いることは推奨されません。長時間常駐するEXEのハンドルリーク調査をApplication Verifierだけに丸投げするのは現実的でなく、自前ログとの組み合わせが必要である / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- failure path(異常系の途中失敗経路)はハンドルリークの原因になることがあります。timeout・reconnect・early returnなどの途中失敗経路でCloseHandleが呼ばれないと、ハンドルリークの原因になることがある。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはHandle Countで確認できます。ハンドルリークは、reconnectなどの操作後にHandle Countが戻らずじわじわ増え続けることで確認できる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 構造化ログ(structured log)はハンドルリークに対する本記事の推奨です。create/openとclose/disposeの対応が崩れている箇所は、sessionId・resourceId・actionを持つ構造化ログで探すことが本記事の推奨対応である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- RAII(Resource Acquisition Is Initialization)はハンドルリークを防ぎます。RAII型でハンドルの生存期間をオブジェクトの生存期間に結び付けると、途中失敗の経路でも自動的にCloseHandleが呼ばれるためハンドルリークを防げる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- Application Verifierはハンドルリークを軽減します。Application Verifierは低リソース時のfailure pathを前倒しで踏ませることで、ハンドルリークのような出にくい壊れ方を早期に表面化させる有効な手段とされる。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- ハンドルリークは二次障害(secondary failure)の原因になることがあります。ハンドルリークは、蓄積の結果として新しいevent/file/threadを作るAPIの失敗という形で、数週間後に二次障害として表面化することが多い。クラッシュ地点は漏らした場所ではなく最後の被害者であることが多い。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- CloseHandleはハンドルリークを防ぎます。途中失敗の経路も含めてCloseHandleを漏れなく呼ぶことが、ハンドルリークの防止そのものになる。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはProcess Explorerで確認できます。長期稼働でハンドルやメモリが増え続ける原因は、Process Explorerでハンドル数やDLLの状態を観察することで確認できる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはProcess Explorerで確認できます。Handle Count・USER Objects・GDI Objects・Private Bytesのカラムを追加し、時間を置いて増え続ける傾きを見ることでハンドルリークを確認できる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはhandle.exeで確認できます。handle -s -p <プロセス>による種類別ハンドル数の定期ログで、GUIを開けない環境でもハンドルリークを定点観測できる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはハンドルトレーシング(handle tracing)で確認できます。どのコードがハンドルを確保したかまで特定する段階では、Application Verifierのハンドルトレーシングなど専用ツールに進む / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ハンドルリークはgcrootコマンドで確認できます。SafeHandleを持つマネージドラッパーが原因のハンドルリークでは、!dumpheap -statでマネージドヒープの増加がないと分かった後、そのラッパーが残っていれば!gcrootでGCルートを追い、OSハンドルの解放漏れ箇所を特定できる / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- SafeAccessTokenHandleはハンドルリークを軽減します。トークンハンドルをSafeAccessTokenHandleとusingで管理することで、取り扱い忘れによるハンドルリークを軽減する / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- CloseHandleはハンドルリークを軽減します。不要になったハンドルをCloseHandleで確実に閉じることが、ハンドルカウントを減らしハンドルリークを防ぐ基本になる / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- ファイルオブジェクトはハンドルリークの原因になることがあります。未完了I/Oやメモリマップトセクションなどカーネル内の参照が残り続けるファイルオブジェクトの山が、ハンドルリークとして観測される / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典 出典
この概念を扱う記事
一次資料
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。