ヒープ データ キャプチャの有効化
プロセス ヒープ分析は、スタックを収集し、HeapAlloc および HeapRealloc イベントをキャプチャする場合が最も効果的です。 シンボルを含むスタックをデコードするには、シンボルのデコードを有効にする必要があります。 ヒープ データは、プロセスの開始時、または既存のプロセスでキャプチャできます。
プロセスの開始時にデータ キャプチャを有効にするには
この例では、データ キャプチャを開始するコマンドライン シーケンスから分析対象のプロセスを開始します。 プロセスの開始時にデータ キャプチャを有効にすると、割り当て情報や履歴が失われないことが保証されます。 プロセスの開始時にデータ キャプチャを有効にするには、次の手順を実行します。
管理者特権でのコマンド プロンプトで、次のコマンドを入力します。
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16
次にコマンドの例を示します。
xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
デスクトップ上でサイド バーが開きます。
次の表は、これらのコマンドの説明です。
コマンド 説明 -start HeapSession
トレース セッションまたはロガー セッションを初期化します。 この場合、セッションには "HeapSession" という名前が付けられます。
-heap
"HeapSession" をヒープ トレースとして識別します。
-PidNewProcess
プロセスを初期化します。 この場合、Windows サイド バーを初期化します。
-BufferSize
イベント データが格納されるバッファーのバッファー サイズを設定します。 バッファーの最適なサイズは 1024 KB です。 既定値は 64 KB です。
-MinBuffers
イベント データ ストレージのバッファーの最小数を設定します。 MinBuffers は、トレース間の一貫性を保証するために、MaxBuffers と同じである必要があります。
-MaxBuffers
バッファーは有限のシステム リソースである非ページ メモリから割り当てられるため、MaxBuffers は控えめに割り当てます。
-stackwalk
stackwalk 機能を初期化して、割り当てと割り当て解除の情報を収集し、その情報を特定のスレッドに関連付けます。
HeapAlloc+HeapRealloc
stackwalk 機能によってキャプチャおよび表示される特定のヒープ イベントを識別します。
次のコマンドを入力します。
xperf -stop -stop HeapSession -d HeapTrace.etl
-d HeapTrace.etl
コマンドは、セッション中に生成されたトレースを HeapTrace.etl ファイルにマージします。
既存のプロセスに対してデータ キャプチャを有効にするには
このオプションを使用すると、プロセスを停止してから再起動しなくてもデータ キャプチャを有効にできます。 これは、アプリケーションが起動するまで分析対象のシナリオが発生しない場合や、初期ヒープ割り当て (これにより、非常に大きなトレース ファイルが生成されることがあります) が必要ない場合に便利です。
次の手順を実行します。
管理者特権でのコマンド プロンプトで、次のように BASE フラグを指定して NT カーネル ロガーを起動します。
xperf -on BASE
既存のプロセスに対してヒープ トレースを有効にするには、次のコマンドの XXX を実際のプロセス ID に置き換えます。
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
プロセスの開始時にデータ キャプチャを行う場合と同じ方法で、トレースの分析準備を行います。
xperf -stop -stop HeapSession -d heapTrace.etl