この記事では、ProcDump を使って、クラッシュしたプロセスあるいはスタック(停止)したプロセスのダンプを作成する方法を紹介しています。
はじめに
ProcDump(procdump64.exe)は、Windows Sysinternals のツールです。Acronis 製品に関する問題のトラブルシューティングを行う際に発生する各シナリオにおいて、このツールを使って、プロセスのダンプを作成できます。
アプリケーションのクラッシュが Windows 2000、Windows XP または Windows Server 2003 で発生する場合は、その代わりにワトソン博士のクラッシュダンプを作成できます。
(!) ProcDump は、ダンプ ファイルをキャプチャするとき、実行されている対象のプロセスを終了しません。
ソリューション
ProcDump を使ってダンプを作成するために、以下の手順に従ってください:
- Windows Sysinternals の Web ページから ProcDumpをダウンロードします。
- ダンプが保存されるフォルダ(たとえば、C:\Dumps\)を作成します。
- アーカイブを解凍して、作成したディレクトリに procdump64.exe を置きます。
- Windows コマンドラインを開きます([スタート] -> [ファイル名を指定して実行] をクリックし、cmd と入力します)。コマンドラインを管理者権限で実行することを推奨します(アイコンを右クリック -> [管理者として実行])。そうでないと、ユーティリティは必要なプロセスを検出できない可能性があります。
- コマンドラインでは、cd というコマンドを使って、ステップ2で作成したフォルダに移動します:
cd <フォルダへのパス>
たとえば: cd C:\Dumps
- 問題の性質(プロセスの即時のクラッシュ、プロセスのハングアップ、ロックアップなど)によって、ProcDump で使用するオプションを選びます。以下では、最も一般的な例を紹介しています:
A.プロセスがクラッシュする場合(たとえば、開始後またはランダムにクラッシュする場合など)、通常、次のコマンドで対応できます:
procdump64 -e -ma -w <プロセス名>
たとえば、service_process.exe がクラッシュする場合は、以下のコマンドを実行します:
procdump64 -e -ma -w service_process.exe
このコマンドを実行すると、ProcDump は(このプロセスがまだ開始されていない場合)プロセスが開始されるまで待って、プロセスが未処理の例外に遭ってクラッシュしたときにこのプロセスの完全なメモリダンプを作成します。
複数のプロセスのメモリダンプをキャプチャする必要がある場合、あるいは、どのプロセスがクラッシュするか分からない場合(カスタム バイナリによって実行されている場合など)は、次のコマンドを使用してください。そうすると、発生するすべてのクラッシュのメモリダンプがキャプチャされます:
procdump64 -ma -i C:\dumps
B.実行されているプロセスの現在の状態のダンプ ファイルを作成したい場合(たとえば、プロセスがハングアップする疑いがある場合、あるいは、このサービスがたくさんのリソースを消費する理由を知りたい場合など)、以下のコマンドを使用してください:
procdump64 -ma -s 5 -n 3 <プロセス名>
(このコマンドを実行すると、5秒ごとに3つの小ダンプが書き込まれます。必要な場合、数字を調整できます。)
あるいは、PID を使うこともできます(同じ名前の複数のプロセスが実行されているときに便利です):
procdump64 -ma <プロセスのPID>(<プロセスのPID> は、対象のプロセスのプロセス識別番号に変えてください)
たとえば、mms.exe がハングアップすると考えられる場合、以下のコマンドを使用できます:
procdump64 -ma -s 5 - n 3 mms.exe
または
procdump64 -ma 3255(プロセス識別番号が 3255 の場合)
(!)パラメータの完全な一覧を確認したい場合は、ProcDump のダウンロード ページを参照するか、procdump64 /? というコマンドを実行してください。
(!)「Multiple processes match the specified name」というメッセージが表示される場合は、Just-In-Time デバッグを使用してください。
- 必要なダンプの作成が終わった後、そのダンプを ProcDump と同じフォルダ(この例では C:\Dumps\)に置くことができます。
- プロセスのダンプを圧縮して zip ファイルにします。
- AcronisInfo ユーティリティの最新の出力を収集することを推奨しています。
- (AcronisInfo の出力と併せて)ダンプ ファイルを FTP 経由で Acronis カスタマーセンターへ送信します。その際、Acronis FTP サーバーへのファイルのアップロードをご参照ください。お客様のケースに関連付けられたユニークなリンクは、このケースに割り当てられたサポート担当者が提供します。
プロセスがクラッシュした場合にクラッシュのダンプが自動的に作成されるように、Just-In-Time デバッグ(AeDebug Windows のオプション)を設定できます。たとえば、上記で記載されている各方法では成功しなかった場合などに有効です。一度設定すると、アプリケーションのクラッシュというイベントが発生したとき、ユーザーによる操作なしで、いつでも ProcDump が自動的に実行され、ダンプ ファイルが書き込まれます。また、システムを何回再起動しても、新しく設定する必要はなく、クラッシュの監視は自動的に継続します。
追加情報
プロセス名が分かっている複数のプロセスのダンプファイルを収集するためには、以下の手順に従ってください:
- procdump64.exe が置かれているディレクトリに移動します。
- 以下のコマンドを実行します:
for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq <プロセス>.exe" /fo csv') do procdump64 -ma %~F SP_%~F.dmp
このコマンドを使用する際、<プロセス> は、ダンプするプロセス(1つまたは複数)のプロセス名に変えてください(たとえば、service_process.exe)。あるいは、このコマンドを使って、バッチファイルを作成します:
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq <プロセス>.exe" /fo csv') do procdump64 -ma %%~F SP_%%~F.dmp
このコマンドを使用する際、<プロセス> は、ダンプするプロセス(1つまたは複数)のプロセス名に変えてください(たとえば、service_process.exe)。
ダンプの作成に役立つ Process Explorer ツールも併せてご確認ください:
http://technet.microsoft.com/en-en/sysinternals/bb896653.aspx
このツールは作成すべきダンプの種類(32/64ビット)を自動的に特定します。
以下の記事もご参照ください: