Menu Close
3.3.2. strace でアプリケーションのシステムコールの監視
strace
ツールは、アプリケーションを実行するシステム (カーネル) コールの監視を有効にします。
前提条件
-
strace
がシステムにインストールされている。
手順
- 監視するシステムコールを特定します。
strace
を起動して、プログラムに割り当てます。監視するプログラムが実行していない場合は、
strace
を起動して、プログラム を指定します。$ strace -fvttTyy -s 256 -e trace=call program
プログラムがすでに実行中の場合は、プロセス id (pid) を検索して、その id に
strace
を割り当てます。$ ps -C program (...) $ strace -fvttTyy -s 256 -e trace=call -ppid
-
call を、表示するシステムコールに置き換えます。
-e trace=call
オプションを複数回使用できます。何も指定しない場合、strace
はすべてのシステムコールタイプを表示します。詳細は、man ページの strace(1) を参照してください。 -
フォークしたプロセスまたはスレッドを追跡しない場合は、
-f
オプションを指定しないでください。
strace
は、アプリケーションで作成したシステムコールとその詳細を表示します。ほとんどの場合、システムコールのフィルターが設定されていないと、アプリケーションとそのライブラリーは多数の呼び出しを行い、
strace
出力がすぐに表示されます。strace
ツールは、プログラムが終了すると終了します。追跡しているプログラムの終了前に監視を中断するには、Ctrl+C を押します。
-
strace
でプログラムを起動すると、そのプログラムはstrace
とともに中断します。 -
実行中のプログラムに
strace
を割り当てると、そのプログラムはstrace
とともに中断します。
-
アプリケーションが実行したシステム呼び出しの一覧を分析します。
- リソースへのアクセスや可用性の問題は、エラーを返す呼び出しとしてログに表示されます。
- システムコールに渡される値とコールシーケンスのパターンは、アプリケーションの動作の原因に関する洞察を提供します。
- アプリケーションがクラッシュした場合、重要な情報はおそらくログの最後にあります。
- 出力には不要な情報が多く含まれています。ただし、目的のシステムコールに対してより正確なフィルターを作成し、この手順を繰り返すことができます。
注記
出力を確認することにも、ファイルに保存することにも利点があります。これを行うには、tee
コマンドを使用します。
$ strace ... |& tee your_log_file.log
関連情報
man ページの strace(1):
$ man strace
- ナレッジベースアーティクル - 「strace を使用して、コマンドが実行したシステムコールを追跡する」
- Red Hat Developer Toolset User Guide - 「strace」の章