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


関連ページ