Linux性能测试命令系列(5)- strace

来源:互联网 发布:安装对联打印机软件 编辑:程序博客网 时间:2024/04/28 23:13

功能:trace system calls and signals

strace能够跟踪进程使用的系统调用,并显示调用过程信息。本文章只给出比较常用的命令。

注:

(1)a.out表示要被strace跟踪的用户可执行程序,

(2)`pidof ./a.out`表示要被strace跟踪的正在运行的a.out对应的进程PID

(3)由于操作起来很简单,暂时不给出测试用例。


1)跟踪指定程序

$strace ./a.out

2)跟踪指定进程

$strace -p $(pidof  ./a.out)

或者

$strace -p `pidof ./a.out`3

3)将strace显示内容输出到指定日志中

$strace -p $(pidof ./a.out) -o strace.log

$strace ./a.out -o strace.log


4)显示系统调用的执行时间

$strace -t ./a.out #执行时间的单位为秒

$strace -tt ./a.out #执行时间的单位为毫秒


6)显示执行系统调用接口的用户程序代码行地址

$strace -i ./a.out


7)跟踪进程中fork()之后的进程

$strace -f ./a.out


8)将所有进程的跟踪结果输出到指定日志filename.<PID>中,其中<PID>是每个进程的进程号

注:filename是由-o filename提供的

$strace -ff -o strace.log ./a.out

将会产生strace.log.6800、strace.log.6801类似以进程号结尾命令的文件log日志。


9)strace还可以跟踪指定的事件(event)

$strace -e trace=write ./a.out #表示只跟踪系统调用接口write的调用跟踪信息

$strace -e trace=write,read ./a.out  #跟踪write,read这两者的调用

$strace -e trace=file ./a.out #只跟踪有关文件操作的系统调用

$strace -e trace=process ./a.out #只跟踪有关进程控制的系统调用

$strace -e trace=network ./a.out #只跟踪与网络有关的系统调用

$strace -e trace=signal ./a.out #只跟踪与系统信号有关的系统调用

$strace -e trace=ipc ./a.out #只跟踪与进程间通信有关的系统调用


10)还可以跟踪指定的系统信号

$strace -e signal != SIGIO ./a.out #表示不跟踪ISGIO系统信号

$strace -e signal = SIGPIPE #表示跟踪SIGPIPE系统信号


11)还可以对系统接口函数操作的文件进行跟踪

$strace -e read=3,5 ./a.out   #输出从指定文件中读出的数据

$strace -e write=3 ./a.out #输出写入到指定指定文件中的数据


12)比较重要的一个使用是:统计每个系统调用的执行时间、次数和出错次数等信息!

$strace -c ./a.out

这是一个很有用的选项,当需要对指定程序进行系统调用的热点进行查找时!

给出-c选项的使用示例:


从执行结果看出,-c选项的信息统计列有:执行时间的半分比、执行的时间、被调用次数、调用时出错次数、对应的syscall名称

最后还有一行时总结以上所有的信息总和。

《完》

0 0