一.简介
Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调用跟踪用「strace」,用户态的函数调用跟踪用「ltrace」
这2个工具可以对系统进程进行跟踪,查看这个进程做了哪些操作和动作。如果strace没获取到数据,可以用ltrace看看。
二.例子
找出程序读取的文件
mysql首先尝试去/etc/mysql/my.cnf读取,没找到继续下一个
strace mysql 2>&1 | grep my.cnf
读取特定的部分,比如open或者start
strace -e open mysql 2>&1 | grep my.cnf
查看现在程序在做什么
strace -p pid号
查看程序中哪个部分消耗大量cpu
等待一会,按ctrl-c退出,strace会列出如上的profiling数据。在当前例子中,占用最多的是 epoll_wait,然后百度这个函数,看看他是做什么的。
strace -c -p pid号
查看某个命令或者服务运行中的操作
strace -c >/dev/null 命令
无法连接服务器查看信息
使用nc去连接一个不存在的服务器的80端口,用于模拟访问不通的网站。
yum -y install nc
strace -e poll,select,connect,recvfrom,sendto nc www.baidu.com 80
注意到尝试连接/var/run/nscd/socket?这意味着nc首先尝试连接NSCD–the Name Service Cache Daemon–它通常用来基于NIS,YP,LDAP或者类似的目录协议提供域名查询。在这里它失败了。
然后它连接DNS(DNS是port 53,所以”sin_port=htons(53)”)。