文章目录
什么是strace
strace是一个非常简单的工具,它可以跟踪系统调用的执行。最简单的方式,它可以从头到尾跟踪binary的执行,然后以一行文本输出系统调用的名字,参数和返回值。
其实它可以做的更多:
** 可以对特定的系统调用或者几组系统调用进行过滤
** 可以通过统计特定系统调用的调用次数、耗费的时间、成功和失败的次数来配置(profile)系统调用的使用I
** 跟踪发送给进程的信号量
** 可以通过pid附着(attach)到任何运行的进程
常用用法
1、找出程序在startup的时候读取的哪个config文件?
$ strace php 2>&1 | grep php.ini
open("/usr/local/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/php.ini", O_RDONLY) = 4
lstat64("/usr/local/lib/php.ini", {st_mode=S_IFLNK|0777, st_size=27, ...}) = 0
readlink("/usr/local/lib/php.ini", "/usr/local/Zend/etc/php.ini", 4096) = 27
lstat64("/usr/local/Zend/etc/php.ini", {st_mode=S_IFREG|0664, st_size=40971, ...}) = 0
可以看出这个版本的PHP从/usr/local/lib/php.init读取config文件(但是先尝试/usr/locl/bin)
2、查看具体进程的系统调用情况
3、查看具体进程及线程的系统调用关系
strace -fp 3544728
4、显示子进程、子线程、系统调用时长、-tt 显示跟踪时间
-f 表示跟踪子进程和子线程
-T 显示系统调用的时长
-tt 显示跟踪时间
strace -f -T -tt -p 12345