strace
straceとは
straceは、プロセスが利用するシステムコールや受信するシグナルなどを追跡(トレース)するコマンドです。
straceを利用することで、実行中プログラム(プロセス)をシステムコールレベルでデバッグすることが可能となります。
strace使用方法
コマンドのシステムコールを追跡する
コマンドで使用しているシステムコールを表示します。
表示される情報が膨大になるため、「-o」オプションで出力先ファイルを指定すると、確認しやすくなります。
$ strace -o <出力先ファイル名> <コマンド>
指定プロセスのシステムコールの追跡する
straceは既に動作しているプロセス(コマンド)に対してアタッチすることができます。
プロセスに対して権限がなければトレースできないため、実行ユーザを切り替える必要があります。
$ strace -p <プロセスID> -o <出力先ファイル名>
複数プロセスを同時にトレースする場合には下記のようにコマンド実行します。
$ strace -p <PID> -p <PID> -o <出力先ファイル名>
特定のシステムコールのみを追跡する
特定のシステムコールに絞ってトレースする場合は「e」オプションを使用します。
$ strace -e <システムコール名> <コマンド>
複数のシステムコールをトレースする場合は、「-e trace=」以下にカンマで区切って列挙します。
$ strace -e trace=<システムコール名>,<システムコール名> <コマンド>
タイムスタンプを出力する
システムコールの実行時間を出力するには、「t」オプションを使用します。
遅延処理箇所の特定などが可能になります。
なお、「r」オプションを使用することで、システムコールの処理時間が出力されます。
$ strace -t <コマンド>
統計情報(サマリー)を出力する
トレース結果の統計情報を出力するには「c」オプションを使用します。
システムコールの呼び出し回数などを表示できます。
以下は実行結果の一部抜粋となります。
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
-nan 0.000000 0 13 read
-nan 0.000000 0 8 write
-nan 0.000000 0 26 open
-nan 0.000000 0 26 close
-nan 0.000000 0 25 fstat
-nan 0.000000 0 39 mmap
-nan 0.000000 0 16 mprotect