【性能问题排查】strace

在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。

1)跟踪进程
strace -o output.txt -T -tt -e trace=all -p 28979
上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面
2)统计概要
它包括系统调用的概要,执行时间,错误等等。使用-c选项能够以一种整洁的方式展示:

[root@localhost zonewebroot]# strace -c -p 40256
Process 40256 attached - interrupt to quit
Process 40256 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 56.15    0.005559           0     52617           poll
 28.23    0.002795           0     55043      2350 recvfrom
 13.08    0.001295          48        27           brk
  2.54    0.000251           0      7337           sendto
  0.00    0.000000           0         8           close
  0.00    0.000000           0        31           munmap
  0.00    0.000000           0         4           shutdown
------ ----------- ----------- --------- --------- ----------------
100.00    0.009900                115067      2350 total

3)查看线程
strace -f -F -o /tmp/strace.txt xxserver
这里 -f -F 选项告诉strace同时跟踪 fork和vfork 出来的进程,-o选项把所有strace输出写到/tmp/strace.txt里 面,xxserver 是要启动和调试的程序。
4)跟踪多个进程
比如nginx如果存在多个worker进程的话
strace $(pidof “nginx” | sed ‘s/\([0-9]*\)/-p \1/g’)