ProcDumpでメモリダンプを収集する方法


序章

プロセスのメモリダンプは、Webサイトのトラブルシューティングに使用される非常に効率的な情報源であり、Sitecoreサポートはこれをご提供いただくよう頻繁にお客様にリクエストしています。

ユーザーのリクエストに応じて(オンデマンド)、あるいは特定のイベントに応じて(条件) 、特定のプロセスのメモリ ダンプを収集できる様々なツールが存在します。

本記事では、ProcDumpアプリケーションにてメモリダンプを収集する方法について説明します。

メモリダンプを収集する他の方法については、次の記事を参照してください: メモリダンプを収集する方法

Procdumpの概要とダウンロードリンク

ProcDumpツールは、Sysinternalsによって公開されている無料のコマンド ライン ツールであり、メモリダンプ ファイルのオンデマンド収集と条件付き収集の両方が可能です。メモリダンプ ファイルを生成するための、さまざまなプロパティや条件がサポートされています。

ツールは以下からダウンロードできます: https://docs.microsoft.com/ja-jp/sysinternals/downloads/procdump

メモリダンプ ファイルの収集: オンデマンド

任意のタイミングでメモリダンプ ファイルを収集するには、条件関連のパラメータは指定せずにProcDumpツールを実行します。

procdump -ma [Name or PID]

ProcDumpでは、ターゲット プロセスを識別するために、プロセス名またはプロセスIDを引数に指定する必要があります。

プロセス名が1つしかない場合は、プロセス名(IIS 6以降の場合はw3wp.exeなど)を使用できます。

w3wp.exe名のプロセスが複数ある場合は、プロセスIDを指定してください。特定のSitecoreインスタンスのプロセスIDを取得する方法については、次の記事を参照してください。 
実行中のSitecore インスタンスのプロセスIDを特定する方法

重要: 必ず-ma引数を指定してください。この引数は、フル メモリダンプ ファイルを収集するようにツールに指示します。指定しない場合、収集されたメモリダンプ ファイルに、有用な診断情報が限られた量しか含まれない場合があります。

メモリダンプ ファイルの収集: 条件付き

手動のメモリダンプ収集が適切でない場合、ProcDumpツールは、メモリダンプを自動的に収集するさまざまな条件を指定する機能を提供します。次の条件がサポートされています。

以下の節では、ツールの使用に関するいくつかの基本的なシナリオについて説明します。

  1. 初回マネージド例外(ファースト チャンス マネージド例外)に基づいてメモリダンプ ファイルを収集する

    初回例外によってメモリダンプ ファイルを収集するには、-e 1引数を使用します。複数のメモリダンプ ファイルを収集するには、-n [num]引数を使用します。

    例: プロセスに初回例外が発生した際にメモリダンプ ファイルを収集する:

    procdump -e 1 -ma [Name or PID]

    例: 発生した初回例外に基づいて3つのメモリダンプ ファイルを収集する:

    procdump -n 3 -e 1 -ma [Name or PID]
  2. 特定の初回マネージド例外に基づいてメモリダンプ ファイルを収集する

    ProcDumpツールは、例外タイプ フィルタを設定すると、特定の例外タイプに対してのみメモリダンプを収集できるようになります。特定の例外が発生する理由のトラブルシューティングに役立ちます。引数は-f [ExceptionType]です。 

    例: System.NullReferenceException例外がスローされた時にメモリダンプ ファイルを収集する:

    procdump -e 1 -f "System.NullReferenceException" -ma [Name or PID]
  3. 高CPU使用率の場合にメモリダンプ ファイルを収集する

    -c [%value]引数は、メモリダンプ ファイルを収集するCPU使用率のしきい値を指定します。

    -c引数は通常、次の引数の一つと組み合わせて使用します:

    -s [secs]引数: CPU使用率が指定された水準を何秒間維持したらメモリダンプ ファイルを収集するかを指定します。デフォルト値は10秒です。

    -u引数: すべてのコアの平均CPU使用率と比較して、追跡している特定のプロセッサ コアのCPU使用率が何%になったらメモリダンプ ファイルを収集するかを指定します。

    例: プロセスが合計CPUリソースの60%以上を5秒間使用した場合に、メモリダンプ ファイルを収集する:

    procdump -c 60 -s 5 -ma [Name or PID]

    例: プロセスが単一のCPUコアのリソースの80%以上を15秒間使用した場合に、メモリダンプ ファイルを収集する:

    procdump -c 80 -u -s 15 -ma [Name or PID]
  4. 高メモリ使用量の場合にメモリダンプ ファイルを収集する

    -m [MBs]引数で、メモリダンプ ファイルを収集するメモリ使用量のしきい値を指定します。

    例: プロセスのメモリ使用量が500MBを超える場合に、メモリダンプ ファイルを収集する:

    procdump -m 500 -ma [Name or PID]
  5. パフォーマンス カウンタ値に基づいてメモリダンプ ファイルを収集する

    -p \Process(Name_PID)\[counterName] [threshold]引数で、メモリダンプ ファイルの収集をトリガーするWindowsパフォーマンス カウンターのしきい値を指定できます。

    例: Thread Count(スレッド数)のパフォーマンス カウンターが85スレッド以上に達した時に、メモリダンプ ファイルを収集する場合(下記の例ではプロセス名がw3wp、プロセスIDが66666):

    procdump -p "\Process(w3wp_66666)\Thread Count" 85 -ma 66666
    註: 同じ名前のプロセスが1つしかない場合、プロセスID値を指定しなくてもメモリダンプ ファイルを収集することはできますが、常にプロセスIDを指定することをお勧めします。ProcDumpツールは、指定された名前とプロセスIDを使用して、パフォーマンス カウンターを監視する必要があるプロセスを識別します。従って、プロセス名のみを指定した際に、同じ名前のプロセスが2つ存在する場合、ProcDumpが目的のものとは異なるプロセスのパフォーマンス カウンターを使用して、メモリダンプ ファイルの収集を実行する可能性があるためです。