処理に時間がかかることがあり、どこが原因で遅くなっているのかを調べるときにstrace
を利用して原因調査をしたことがあったので、使い方をまとめる。
基本的な使い方
これから処理を実行するとき
- usage:
strace 実行処理
- ex:
strace perl hoge.pl
- usage:
既に起動しているプロセスに対して実行するとき
- usage:
strace -p [pid]
- ex:
strace -p 111
- usage:
よく使うオプション
オプション | 説明 |
---|---|
-p | 指定したプロセスにアタッチし、トレースする。 |
-f | 子プロセスについてもアタッチし、トレースする。 |
-T | システムコールに費やした時間を表示する。 |
-tt | それぞれの処理をマイクロ秒まで表示する。 |
使用例
ex1.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# /usr/bin/strace -fT -p 690
Process 690 attached with 3 threads
[pid 726] restart_syscall(<... resuming interrupted call ...> <unfinished ...>
[pid 722] restart_syscall(<... resuming interrupted call ...> <unfinished ...>
[pid 690] restart_syscall(<... resuming interrupted call ...>) = 1 <0.027705>
[pid 690] read(3, 0x7ffcbe128ee0, 16) = -1 EAGAIN (Resource temporarily unavailable) <0.000050>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 236362843}) = 0 <0.000042>
[pid 690] write(3, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000042>
[pid 690] recvmsg(9, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000400}, msg_iov(1)=[{"l\0\0\0\30\0\0\0\0\0\0\0\0\0\0\0\n\200\0\0\377\0\0\1\0\2\0\0\10\0\17\0"..., 16384}], msg_controllen=32, {cmsg_len=28, cmsg_level=SOL_SOCKET, cmsg_type=SCM_CREDENTIALS{pid=0, uid=0, gid=0}}, msg_flags=0}, 0) = 108 <0.000047>
[pid 690] write(3, "\1\0\0\0\0\0\0\0", 8) = 8 <0.000041>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 237019821}) = 0 <0.000057>
[pid 690] poll([{fd=3, events=POLLIN}, {fd=10, events=POLLIN}, {fd=13, events=POLLIN}, {fd=16, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=15, events=POLLIN}, {fd=9, events=POLLIN|POLLPRI}], 8, 247763) = 1 ([{fd=3, revents=POLLIN}]) <0.000039>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 237225285}) = 0 <0.000021>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 237285903}) = 0 <0.000021>
[pid 690] poll([{fd=3, events=POLLIN}, {fd=10, events=POLLIN}, {fd=13, events=POLLIN}, {fd=16, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=15, events=POLLIN}, {fd=9, events=POLLIN|POLLPRI}], 8, 247763) = 1 ([{fd=3, revents=POLLIN}]) <0.000035>
[pid 690] read(3, "\2\0\0\0\0\0\0\0", 16) = 8 <0.000022>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 237501095}) = 0 <0.000021>
[pid 690] clock_gettime(CLOCK_MONOTONIC, {1803655, 237560551}) = 0 <0.000022>
[pid 690] poll([{fd=3, events=POLLIN}, {fd=10, events=POLLIN}, {fd=13, events=POLLIN}, {fd=16, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN}, {fd=15, events=POLLIN}, {fd=9, events=POLLIN|POLLPRI}], 8, 247763^CProcess 690 detached
<detached ...>ex2.)
1
2
3
4
5# /usr/bin/strace -f -p 690 -tt
Process 690 attached with 3 threads
[pid 726] 21:48:39.863387 restart_syscall(<... resuming interrupted call ...> <unfinished ...>
[pid 722] 21:48:39.863464 restart_syscall(<... resuming interrupted call ...> <unfinished ...>
[pid 690] 21:48:39.863478 restart_syscall(<... resuming interrupted call ...>