次の方法で共有


ヒープ データ キャプチャの有効化

プロセス ヒープ分析は、スタックを収集し、HeapAlloc および HeapRealloc イベントをキャプチャする場合が最も効果的です。 シンボルを含むスタックをデコードするには、シンボルのデコードを有効にする必要があります。 ヒープ データは、プロセスの開始時、または既存のプロセスでキャプチャできます。

プロセスの開始時にデータ キャプチャを有効にするには

この例では、データ キャプチャを開始するコマンドライン シーケンスから分析対象のプロセスを開始します。 プロセスの開始時にデータ キャプチャを有効にすると、割り当て情報や履歴が失われないことが保証されます。 プロセスの開始時にデータ キャプチャを有効にするには、次の手順を実行します。

  1. 管理者特権でのコマンド プロンプトで、次のコマンドを入力します。xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16

  2. 次にコマンドの例を示します。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 機能によってキャプチャおよび表示される特定のヒープ イベントを識別します。

  3. 次のコマンドを入力します。xperf -stop -stop HeapSession -d HeapTrace.etl

    -d HeapTrace.etl コマンドは、セッション中に生成されたトレースを HeapTrace.etl ファイルにマージします。

既存のプロセスに対してデータ キャプチャを有効にするには

このオプションを使用すると、プロセスを停止してから再起動しなくてもデータ キャプチャを有効にできます。 これは、アプリケーションが起動するまで分析対象のシナリオが発生しない場合や、初期ヒープ割り当て (これにより、非常に大きなトレース ファイルが生成されることがあります) が必要ない場合に便利です。

次の手順を実行します。

  1. 管理者特権でのコマンド プロンプトで、次のように BASE フラグを指定して NT カーネル ロガーを起動します。xperf -on BASE

  2. 既存のプロセスに対してヒープ トレースを有効にするには、次のコマンドの XXX を実際のプロセス ID に置き換えます。xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

  3. プロセスの開始時にデータ キャプチャを行う場合と同じ方法で、トレースの分析準備を行います。xperf -stop -stop HeapSession -d heapTrace.etl

heap