StackOverFlowExceptionが発生した際のメモリ ダンプを収集する方法について


説明

プロセスのメモリ ダンプは、サイトのトラブルシューティングを効率的に行うのに役立つ情報源であり、Sitecoreサポートが調査のためにお客様にしばしばご提供を依頼している情報の一つです。ユーザー リクエスト(オンデマンド)および特定イベント(条件付き)で特定のプロセスのメモリ ダンプの収集を可能にする様々なツールが提供されています。この記事では、StackOverflowExceptionが発生した際のメモリ ダンプの収集方法について説明します。

説明

StackOverflowExceptionは、スレッドがスタック領域を使い尽くすことによってスローされる例外です。.NET上では、アプリケーション スレッドのスタックは1MBの領域を占めており、無限再帰(コール フレームによるスタックの埋め尽くし)やスレッド スタックに大量の値型オブジェクト(通常は大きな構造体)が割り当てられることによって、スレッドがスタック領域の上限に到達する場合があります。 StackOverflowExceptionが発生すると、動作の遅延が発生したり、アプリケーションがクラッシュしたりする症状が見られます。
StackOverflowExceptionは、Windowsのログに表示されるネイティブな例外の1つです。例:

C00000FD.STACK_OVERFLOW

初回のStackOverflowExceptionでメモリ ダンプを収集する方法

この例外を最も効率的に調査する方法は、StackOverflowExceptionエラー外が発生する際のメモリダンプを収集することです。初回のStackOverflowExceptionを含むメモリ ダンプを収集するには、下記のProcDumpコマンドを使用してください:

procdump.exe -accepteula -e 1 -f C00000FD.STACK_OVERFLOW -g -ma [PID]

出力される.dmpファイルには、問題のあるスレッドが含まれており、他の方法で収集されたメモリ ダンプと同様の調査方法で扱うことが可能です。

ProcDumpを使用してメモリ ダンプを収集する

さまざまな環境におけるメモリ ダンプをProcDumpで収集する方法につきましては、以下の記事を参照してください: