Process Explorer・handle.exe・VMMapによる長期稼働アプリ調査の知識マップ(知識グラフ)
type: Dataset
description: この記事は、装置連携アプリの「だんだん重くなる」「ファイルが消せない」「ハングした」という三大症状を、Process Explorer・handle.exe・VMMapという状態観察系のSysinternalsツールで切り分ける方法を扱う。ファイル使用中はProcess ExplorerのFind Handle or DLLやhandle.exeで掴んでいるプロセスを特定し、ハンドルリークはHandle Countカラムとhandle -sの定点観測で確認でき、GDI/USERオブジェクトの上限接近も同じ手段で監視できる。ハングはThreadsタブのスレッドスタックで調べるが、読むにはdbghelp.dllとシンボルパスからなるシンボル設定が前提になる。Private Bytesの増加はVMMapでHeap・Managed Heap・Private Dataなどに内訳を割ってから専用ツールに進み、プロセス単位で原因が見えないときはRAMMapでOS全体のメモリ使用状況を見る。

Process Explorer
type: Concept
definition: プロセスに読み込まれているDLLだけでなく、ハンドル・スレッドスタック・GDI/USERオブジェクト数なども確認できるSysinternalsのプロセス監視ツール。管理者として実行すると他ユーザーやサービスのプロセスも参照できる。
configured by: シンボルサーバー
recommended for: 使用中ファイルのロック
recommended for: アプリケーションのハング(応答なし)

handle.exe
type: Concept
definition: 開いているハンドルの一覧・検索を行う、管理者権限が必要なSysinternalsのコマンドラインツールである。
alternative label: Handle
alternative label: handle -s
requires: 管理者権限
recommended for: 使用中ファイルのロック

VMMap
type: Concept
definition: プロセスの仮想・物理メモリを、コミット済み仮想メモリの種類別内訳として分析できるSysinternalsのツールである。
alternative label: VMMap.exe

管理者権限
type: Concept
definition: コンピューター全体の設定を変更できる権限。
alternative label: 昇格

ハンドルリーク
type: Concept
definition: 参照カウントやハンドルカウントの数え違いなどにより、不要になったハンドル(ファイル・イベント・スレッド・GDIオブジェクト・アクセストークンなどカーネルオブジェクトへの参照)が解放されずに積み上がっていく状態。
alternative label: Handle Leak
verified by: Process Explorer
verified by: handle.exe
verified by: ハンドルトレーシング(handle tracing)

GDI/USERオブジェクトの上限
type: Concept
definition: GDIオブジェクト・USERオブジェクトに存在する、プロセスごとの既定上限(既定1万個)とセッション全体の理論上限65,536個という制約である。
alternative label: GDI Objects
alternative label: USER Objects
alternative label: GDIProcessHandleQuota
verified by: Process Explorer

シンボルサーバー
type: Concept
definition: PDBなどのシンボルファイルを、ファイル名ではなくバイナリとの一致情報に基づいて整理し、デバッガーが必要なときに取得できるようにする仕組み。
uses: WinDbg

WinDbg
type: Concept
definition: クラッシュダンプやハングしたプロセスの状態をカーネル/ユーザーモードで解析するためのMicrosoft製デバッガー。SOS拡張によるマネージドヒープ解析や、Application Verifierの検出結果の解析にも使われる。
alternative label: Debugging Tools for Windows

ファイルマッピング(メモリマップトファイル)
type: Concept
definition: ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。
alternative label: File Mapping
alternative label: メモリマップトファイル
verified by: VMMap

Private Bytesの増加
type: Concept
definition: プロセスのPrivate Bytesが操作の繰り返しに応じて増え続け、二度と減らない状態である。
alternative label: メモリリーク(ネイティブ/マネージド)
alternative label: Private Bytesが増え続ける
verified by: VMMap

RAMMap
type: Concept
definition: OS全体の物理メモリ使用状況を、Use Counts・Processes・File Summaryなどのタブで分析できるSysinternalsのツールである。
alternative label: RAMMap.exe

使用中ファイルのロック
type: Concept
definition: 実行中のexeやロード済みDLLがメモリマップドファイルとしてOSに保持されるため、中身の書き換えと削除がブロックされる状態である。
alternative label: ファイル使用中
alternative label: 共有違反
alternative label: ファイル使用中ロック(削除・差し替え不可)
alternative label: ファイルが使用中
alternative label: ファイルが削除できない

アプリケーションのハング(応答なし)
type: Concept
definition: ウィンドウが応答なしになり、UIスレッドなどが何らかの待機から戻らない状態である。
alternative label: ハング
alternative label: 応答なし

ハンドルトレーシング(handle tracing)
type: Concept
definition: ハンドルのopen・close・不正参照の履歴をスタック付きで記録する、Application VerifierのHandlesチェックが有効な際に自動で有効になる機能である。
alternative label: Handle Tracing
broader: application-verifier

Sysinternals Live
type: Concept
definition: Sysinternalsツールをダウンロードせずに、live.sysinternals.comのURLやUNCパスから直接実行できるサービスである。
alternative label: live.sysinternals.com

subject: Process Explorer
predicate: requires
object: 管理者権限
description: 調査目的でのProcess Explorer利用は管理者として実行することが事実上必須で、一般権限では他ユーザーやサービスのプロセスのスタック・ハンドルが見えない(自分と同じユーザーのプロセスだけを見る分には一般権限でもアクセスできる)
evidence: process-explorer
verified at: 2026-08-01
certainty: context-dependent

subject: handle.exe
predicate: requires
object: 管理者権限
description: handle.exeは公式に管理者権限が必要とされているコマンドラインツールである
evidence: handle
verified at: 2026-08-01
certainty: established

subject: VMMap
predicate: requires
object: 管理者権限
description: VMMapは管理者として実行してから対象プロセスを選ぶ手順になっている(調査目的で他ユーザーやサービスのプロセスを見る場合は事実上必須。自分と同じユーザーのプロセスだけを見る分には一般権限でも動作し得る)
evidence: vmmap
verified at: 2026-08-01
certainty: context-dependent

subject: ハンドルリーク
predicate: verifiedBy
object: Process Explorer
description: Handle Count・USER Objects・GDI Objects・Private Bytesのカラムを追加し、時間を置いて増え続ける傾きを見ることでハンドルリークを確認できる
evidence: process-explorer
verified at: 2026-08-01
certainty: established

subject: ハンドルリーク
predicate: verifiedBy
object: handle.exe
description: handle -s -p <プロセス>による種類別ハンドル数の定期ログで、GUIを開けない環境でもハンドルリークを定点観測できる
evidence: handle
verified at: 2026-08-01
certainty: established

subject: GDI/USERオブジェクトの上限
predicate: verifiedBy
object: Process Explorer
description: USER Objects・GDI Objectsカラムを追加すると、プロセスごとの上限やセッション全体の上限への接近を監視できる
evidence: gdi-objects
evidence: process-explorer
verified at: 2026-08-01
certainty: established

subject: Process Explorer
predicate: configuredBy
object: シンボルサーバー
description: Threadsタブでスレッドスタックの関数名を読むには、Options→Configure SymbolsでDbghelp.dllパスとシンボルパスを設定する必要がある
evidence: process-explorer
evidence: microsoft-public-symbols
verified at: 2026-08-01
certainty: established

subject: シンボルサーバー
predicate: uses
object: WinDbg
description: シンボル解決に使うdbghelp.dllとsymsrv.dllは、Debugging Tools for Windows(WinDbgのインストールに含まれる)のフォルダーから入手する
evidence: debugger-download-tools
verified at: 2026-08-01
certainty: established

subject: ファイルマッピング(メモリマップトファイル)
predicate: verifiedBy
object: VMMap
description: VMMapのShareable/Mapped File分類で、プロセス間連携などで使われているメモリマップトファイルの領域を確認できる
evidence: vmmap
verified at: 2026-08-01
certainty: established

subject: Private Bytesの増加
predicate: verifiedBy
object: VMMap
description: Private Bytesが増え続ける症状は、VMMapでHeap・Managed Heap・Private Dataなどの分類ごとの内訳を確認することで原因の土俵を特定できる
evidence: vmmap
verified at: 2026-08-01
certainty: established

subject: VMMap
predicate: shouldPrecede
object: RAMMap
description: プロセス単位の疑いをVMMapで確認し、どのプロセスも肥大していなければRAMMapでOS全体の物理メモリ使用状況を見る、という順で進める
evidence: rammap
verified at: 2026-08-01
certainty: context-dependent

subject: Process Explorer
predicate: recommendedFor
object: 使用中ファイルのロック
description: ファイルが削除・差し替えできない症状は、Find Handle or DLL(Ctrl+F)でファイル名の部分一致検索をすれば、掴んでいるプロセスを数秒で特定できる
evidence: process-explorer
verified at: 2026-08-01
certainty: established

subject: handle.exe
predicate: recommendedFor
object: 使用中ファイルのロック
description: handle.exeにファイル名やパスの一部を渡すと、そのハンドルを開いているプロセスを一覧できる
evidence: handle
verified at: 2026-08-01
certainty: established

subject: Process Explorer
predicate: recommendedFor
object: アプリケーションのハング(応答なし)
description: 応答なしのプロセスは、プロパティのThreadsタブでスレッドのスタックを見て、どの関数呼び出しで止まっているかを特定する
evidence: process-explorer
verified at: 2026-08-01
certainty: established

subject: WinDbg
predicate: recommendedFor
object: アプリケーションのハング(応答なし)
description: .NETアプリのマネージドなハング・デッドロックを正確に追うには、ハング中にダンプを採ってWinDbg+SOSで解析する方が確実
evidence: debugger
verified at: 2026-08-01
certainty: context-dependent

subject: ハンドルリーク
predicate: verifiedBy
object: ハンドルトレーシング(handle tracing)
description: どのコードがハンドルを確保したかまで特定する段階では、Application Verifierのハンドルトレーシングなど専用ツールに進む
evidence: application-verifier
verified at: 2026-08-01
certainty: established

subject: Process Explorer
predicate: uses
object: Sysinternals Live
description: Process Explorerはダウンロードして手元で実行するほか、live.sysinternals.comから直接実行することもできる。Sysinternals Liveは入手経路の1つで必須ではない
evidence: sysinternals
verified at: 2026-08-01
certainty: context-dependent

subject: VMMap
predicate: uses
object: Sysinternals Live
description: VMMapはダウンロードして手元で実行するほか、live.sysinternals.comから直接実行することもできる。Sysinternals Liveは入手経路の1つで必須ではない
evidence: sysinternals
verified at: 2026-08-01
certainty: context-dependent

subject: handle.exe
predicate: uses
object: Sysinternals Live
description: handle.exeはダウンロードして手元で実行するほか、live.sysinternals.comから直接実行することもできる。Sysinternals Liveは入手経路の1つで必須ではない
evidence: sysinternals
verified at: 2026-08-01
certainty: context-dependent

subject: RAMMap
predicate: uses
object: Sysinternals Live
description: RAMMapはダウンロードして手元で実行するほか、live.sysinternals.comから直接実行することもできる。Sysinternals Liveは入手経路の1つで必須ではない
evidence: sysinternals
verified at: 2026-08-01
certainty: context-dependent