かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  メモ. Process Monitorを絶秒なタイミングで自動実行

 

 

メモ. Process Monitorを絶秒なタイミングで自動実行

2024年07月23日配信
執筆者:山内 和朗

 Windows Sysinternalsの「Process Monitor(Procmon)」は、コンピューターの原因不明の問題を診断するときに多くの人が最初に試してみるユーティリティです。そして、Procmonがトラブルの原因を突き止めた、最後のユーティリティということもあります。そんなProcmonを絶妙なタイミングで開始するためには、Procmonのコマンドラインオプションを使用した自動化が鍵になります。

 

Procmonの一般的な使い方

 

 Procmonは実行ファイル(Procmon.exe)をダブルクリックして起動すれば、インストールなしですぐに使い始めることができます。Procmonの概要と一般的な使い方ついては、このブログの以下の記事で説明しました。今回の記事を読み進める前に一読しておくことをお勧めします。

 

ITニュース. Sysinternals更新情報: Process Monitor v4.0(さらにv4.01)

Procmonの自動化を可能にするコマンドラインパラメーター

 

 問題を再現できず、しかも不定期に突然発生する問題の調査は、Procmonの一般的な使い方では困難です。いつ起きるかわからないような問題のために、何時間も何日もキャプチャし続けるというわけにはいきません。Procmonはレジストリやファイルシステム、ネットワーク、プロセス、DLLのアクティビティをキャプチャし、仮想メモリ(既定)またはログファイルに短時間で膨大なイベントを記録します。つまり、リソースを大量に消費する可能性があるため、常時実行しておくようなことはできません。必要なときに、必要な時間だけ実行し、調査対象のイベントをできるだけ抑制するのが、トラブル解決までの近道です。

 Procmonは多数のコマンドラインパラメーターを提供しており、キャプチャの開始から停止までをコマンドラインやバッチファイルから完全に制御することができます。例えば、次のコマンドラインを実行すると、カレントディレクトリの「myprocmon.pml」をバッキングファイル(Procmonログファイル、.pml)としてキャプチャを開始し、3分(180秒)経過したらProcmonを終了することができます(画面2)。

C:\> .\procmon.exe /accepteula /quiet /minimized /backingfile .\myprocmon.pml & timeout /T 180 /NoBreak & .\procmon.exe /terminate

 保存されたログファイルは、「/OpenLog」パラメーターにパスを指定してProcmonを起動することで参照することができます(画面3)。または、「/NoConnect」パラメーターを指定してProcmonをキャプチャ停止状態で起動し、「File」メニューの「Open」からProcmonログファイルを選択して開きます。
 
画面2
画面2 Procmonのキャプチャを開始し、3分(180秒)後に終了するコマンドライン
 
画面3
画面3 保存されたProcmonログファイルを開いてイベントを調査する

 

BOMでイベントログを監視し、Job Directorでキャプチャする

 

 問題が発生してからProcmonのキャプチャを開始するのでは、コマンドラインを駆使してスピードアップしたとしても、多くの場合、遅すぎるでしょう。「BOM for Windows Ver.8.0 SR1」のような監視ツールを利用すれば、トラブルの予兆を捉えて、ちょうど良いタイミングでキャプチャを開始できるかもしれません。例えば、特定のイベントログの記録や、パフォーマンス問題の発生をトリガーとして、カスタムアクションでProcmonのキャプチャを自動化するのです。

 製品コラム「USBメモリの監視-BOM for Windows活用例(Job Director連携)」では、USBリムーバブルディスク(USBメモリなど)の接続を監視し、Job Directorのジョブネットワークを呼び出して、USBメモリの内容を再帰的に走査する方法が説明されています。同じ監視設定を利用して、Job DirectorのジョブネットワークでProcmonの自動実行を実現してみましょう。


 ジョブネットワークのジョブ用に、次のスクリプト(バッチ)を準備しました。このスクリプトは、コマンドプロンプトで実行可能なバッチファイル(.cmdまたは.bat)そのものですが、ジョブに直接記述することができます。


 スクリプトでは、PMExeにProcmon.exeのパスを指定し、PMFileにProcmonログファイルのパスを指定します。この例では同じログファイルが使用されないように「c:¥tools¥procmon_年月日_時分.pml」というファイル名で保存するようにしています。Procmonログファイルは短時間で巨大化するため、十分な空き領域のある場所をパスに指定してください。スクリプトは、現在実行中のProcmonインスタンスが存在する場合は、既にキャプチャ中とみなし、何もしません。そうでない場合は、3分(180秒)の間キャプチャを実行して終了します。


 なお、多くのジョブ管理ツールがそうであるように、コマンドの入力リダイレクトを受け付けるTIMEOUTコマンドは、ジョブの中では使用できません。そのため、3分(180秒)待機する部分を「powershell.exe start-sleep 180」と記述しています。

@echo off
set time0n=%time: =0%
set PMExe="C:\tools\procmon.exe"
set PMFile= "C:\tools\procmon_%date:~0,4%%date:~5,2%%date:~8,2%_%time0n:~0,2%%time0n:~3,2%.pml"

tasklist /FI "IMAGENAME eq procmon.exe" |find /I "procmon.exe" > NUL
IF %errorlevel% == 0 (
  echo 別のprocmonインスタンスが実行中のため何もしません。
) else (
  echo procmonによるキャプチャ(3分)を開始します。 
  start "" %PMExe% /accepteula /quiet /minimized /backingfile %PMFile%
  powershell.exe start-sleep 180
  %PMExe% /terminate
  echo キャプチャを終了しました。ログファイルは %PMFile% です。
)

 ジョブのスクリプトでProcmonのインスタンスが同時実行されないように配慮していますが、ジョブネットワークのパラメーターとしても同時実行可能数を「1」に設定し、同時に要求された場合は「スキップ」するように設定します(画面4)。

 

画面4
画面4 ジョブネットワーク「StartProcmon3min」は、Procmonの3分(180秒)のキャプチャを実行し、Procmonログファイルに保存するシンプルなジョブ。同時実行されないようにスクリプトおよびジョブネットワークのパラメーターで調整

 製品コラム「USBメモリの監視 - BOM for Windows活用例(Job Director連携)」で作成した監視設定を利用して、このジョブネットワークを実行すると(BOMのカスタムアクションのCheckUSBDrivesジョブネットワークの呼び出しを、StartProcmon3minに変更)、USBリムーバブルディスクが検出されたタイミング(30~60秒のタイムラグがあり)でProcmonの3分間のキャプチャを開始するようになります。Procmonログファイルを開いて、USBリムーバブルデバイスに関連するパスのアクティビティを調査すれば、USBリムーバブルデバイスから読み取られたファイル、書き込まれたファイル、実行されたプログラムなどを調査することができるでしょう(画面5)。

 

画面5
画面5 ジョブネットワークのジョブにより自動的に保存されたProcmonログファイル「procmon_20240607_1443.pml」

 

お勧めの一冊

 Windows Sysinternalsユーティリティの日本語解説については、少し古い書籍ですが、こちらをお勧めします。Windows Sysinternalsユーティリティは更新を続けていますが、ユーティリティのラインアップや基本的な使い方に変わりはありません。Procexpは第2部リファレンスガイド第5章、かなりのボリュームを割いて詳しく説明されています。また、第3部のさまざまなトラブルシューティング事例で最も登場回数の多いユーティリティです。

 

ブックカバーWindows Sysinternals 徹底解説 改訂新版

著者   : Mark E. Russinovich、Aaron Margosis 著
訳者   : 山内和朗
価格   : 6,050 円(税込)
ISBN   : 978-4-8222-9896-8
発行日 : 2017年06月05日
発行元 : 日経BP
頁数   : 740ページ

※書籍の正誤情報、およびユーティリティのこれまでの更新情報については、旧ブログサイトをご覧ください。

blog_subscribe

blog_comment

最新記事