Linux で strace を使ってシステムコールのトレースを調べる時によく使うオプションをメモ。
システムコールを詳細に追う
- tt: 行頭にタイムスタンプをマイクロ秒単位で出力
- T: 行末にシステムコール内での所要時間を出力
- ff: 子プロセスのシステムコールもトレースし、-o との併用でプロセス(スレッド)毎に別ファイルに出力
- o: 指定したファイルに出力。-ff と併用すると、ファイルパス. に出力
- s: 出力文字数を指定。I/Oサイズが1MBなど大きい場合で、読書きした内容を確認したい場合は、大きくする。
- p: プロセスIDを指定。
$ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> -p <PID>
もしくは
$ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> <コマンド>
同じプロセスが生きている間に /proc/[pid]/fd でファイルディスクリプタ番号とファイルパスの対応を確認しておくと、strace で read(17, ... などと出力されている場合に、17 のファイルパスかわかります。
$ ls -l /proc/[pid]/fd
システムコールの種類別に集計(時間・回数)する
$ strace -fc -o <ログ出力先ファイル名> -p <PID>
もしくは
$ strace -fc -o <ログ出力先ファイル名> <コマンド>