プロセス メモリ ダンプは、Web サイトのトラブルシューティングに使用される、大変有効な情報源です。そのため、Sitecoreサポートからも頻繁にお客様に収集を依頼しています。
このため、ユーザー リクエストに基づいて(オンデマンド)、または特定のイベントに基づいて(条件付き)、プロセスのメモリ ダンプを収集するためのツールがいくつかあります。
当KB記事では、Managed GC Aware Dumpアプリケーションを使用したメモリ ダンプの収集方法をご説明します。
その他の方法でのメモリ ダンプの収集方法は、以下の記事をご参照ください。
Managed GC Aware Dumpツールは、オンデマンド、または特定世代の領域に対するガベージ コレクション(GC)直前のメモリ ダンプを収集することができるフリーのコマンドライン ツールです。
他のメモリ ダンプ収集ツールとこのツールの間の最大の違いは、ガベージ コレクション発生時のダンプを収集できる点です。そのため、収集されたファイルからの.NETメモリ ヒープの分析を実現できます。
このツールは、次のリンクからダウンロードできます:ManagedGcAwareDump.zip
.NETのガベージ コレクションにつきましては、以下の記事をご参照ください。
https://learn.microsoft.com/ja-jp/dotnet/standard/garbage-collection/
https://learn.microsoft.com/ja-jp/dotnet/standard/garbage-collection/fundamentals
任意の時点におけるプロセスのメモリ ダンプを収集するには、以下のようにManaged GC Aware Dumpツールを実行します。
ManagedGcAwareDump_x64.exe [Name or PID]
註:
対象のプロセスのバイト数に応じ、適当なツール(ManagedGcAwareDump_x64.exeまたはManagedGcAwareDump_x86.exe)を選択する必要があります。
註:
パラメーターには、[Name or PID]の文字列ではなく、対象のプロセスを特定するためのプロセス名、またはプロセスIDを設定する必要があります。
プロセス名は、プロセスが一意の名前を持つとき(例えば、IIS 6以降のバージョンのIISの場合、w3wp.exeなど)に使用できます。
複数のw3wp.exeが存在する場合は、プロセスIDを指定します。SitecoreインスタンスのプロセスIDの特定方法につきましては、以下のKB記事をご参照ください。
実行中のSitecore インスタンスのプロセスIDを特定する方法
場合により、フル ガベージ コレクションを実行した後にメモリ ダンプ ファイルを収集することが有効な場合があります。ガベージ コレクションにより、使用中のオブジェクトのみが残るため、メモリ ヒープの分析が容易になります。これは高メモリ使用量の調査時に特に有効です。
1. フル ガベージ コレクションを実行し、メモリ ダンプ ファイルを収集する
[自動モード]
Managed GC Aware Dumpツールを使用することで、GCを自動で実行し、GCの完了後にメモリ ダンプ ファイルを収集することができます。以下のように、パラメーター「/fgc」を付与し、ツールを実行してください。
ManagedGcAwareDump_x64.exe /fgc [Name or PID] ManagedGcAwareDump_x86.exe /fgc [Name or PID]
註:
この機能には必須要件があり、以下の条件を満たす場合のみ使用できます。
[手動モード]
ご使用中の.NETバージョンが4.0より前のものである場合や、.NET or Visual C++ Redistributableパッケージがインストールされていない場合、手動で以下の手順を実行する必要があります。
GC終了後、ProcDumpツールがメモリ ダンプ ファイルを収集します。
2. フル ガベージ コレクションを実行、ファイナライザーの実行を待ち、メモリ ダンプ ファイルを収集する
シナリオ1と同じ手順を使用しますが、以下のように調整を加えます。
[自動モード]
ツール実行時、以下のようにパラメーター「/fgc /wpf」を指定します。
ManagedGcAwareDump_x64.exe /fgc /wpf [Name or PID] ManagedGcAwareDump_x86.exe /fgc /wpf [Name or PID]
[手動モード]
「GCTrigger.aspx」ページで、「Force GC and wait for pending finalizers」を押下します。
ある種の状況では、特定世代のヒープのガベージ コレクションの前に、1つ、もしくは複数のダンプ ファイルを収集すると便利なことがあります。これは、例えば頻繁にGCが発生したり、GCによる高負荷が発生している際の調査に役立つ場合があります。
註:この機能は、アプリケーションが.NET 4.0以降のバージョンの場合のみ使用できます。
1. 特定世代のヒープのGC前にメモリ ダンプを収集する
特定世代のヒープのGC前にメモリ ダンプを収集するには、以下のように、パラメーター「/g[Gen]」を付与し、ツールを実行してください([Gen]には、世代数(0,1,2)を設定します)。
ManagedGcAwareDump_x64.exe /g[Gen] [Name or PID] ManagedGcAwareDump_x86.exe /g[Gen] [Name or PID]
2. 特定世代のヒープのGC前に複数のメモリ ダンプを収集する
特定世代のヒープのGC前に複数のメモリ ダンプを収集する(1回のGC毎に1つのメモリ ダンプ)には 、以下のように、パラメーター「"/g[Gen]:[N]」を付与し、ツールを実行してください([Gen]には、世代数(0,1,2)を、[N]には収集するメモリ ダンプ数を設定します)。
ManagedGcAwareDump_x64.exe /g[Gen]:[N] [Name or PID] ManagedGcAwareDump_x86.exe /g[Gen]:[N] [Name or PID]
例:第二世代GC前に3つのメモリ ダンプを収集する場合
ManagedGcAwareDump_x64.exe /g2:3 [Name or PID]