strace

概要

straceの使い方についてのメモ

スレッド

$ strace -p 3887
Process 3887 attached
futex(0x7fc579e0b9d0, FUTEX_WAIT, 3889, NULL^CProcess 3887 detached

上記コマンドを打ったところ、プロセスはちゃんと働いているはずなのにここで止まってしまった。 そのプロセスからforkしたプロセスも対象にいれないといけませんでした。

$ strace -f -p 3887

これでドバーとシステムコールが表示される。

オプション

$ strace -ttT -ff -o ~/strace-log -p 3887
  • tt: 行頭にタイムスタンプをマイクロ秒単位で出力
  • T: 行末にシステムコール内での所要時間を出力
  • ffとo:この2つを組み合わせることでstrace-log.スレッドID毎にstraceのログを出力してくれる
$ strace -ttT -fc -p 3887
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 38.39    0.206970       10893        19           epoll_wait
 36.90    0.198972        1442       138        46 futex
 21.14    0.113984       18997         6         4 restart_syscall
  3.13    0.016853         624        27           mmap
  0.35    0.001882           1      2746           clock_gettime
  0.05    0.000292           4        82           unlink
  0.03    0.000164           4        44           munmap
  0.00    0.000022           0       293           write
  0.00    0.000013           0      1011         6 lstat
  0.00    0.000000           0        15           read
  0.00    0.000000           0        32           open
  0.00    0.000000           0        34           close
  0.00    0.000000           0       115           stat
  0.00    0.000000           0       166           fstat
  0.00    0.000000           0         4           mprotect
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0        44           sched_yield
  0.00    0.000000           0         1           madvise
  0.00    0.000000           0       469           gettimeofday
------ ----------- ----------- --------- --------- ----------------
100.00    0.539152                  5247        56 total

cで統計表示。便利。