参考来源:
centos7 安装strace
《极客时间-网络排查案例课》
strace工具介绍
跟网络排查中有 tcpdump 这样强大的工具类似,进程的排查也有相关的强大工具,比如strace。通过 strace,我们可以把排查工作从进程级别,继续追查到更细的 syscall(系统调用)级别。无论是系统调用读写文件时的问题,还是系统调用本身的问题,都可以在strace 的帮助下现出原形。
strace 这个工具的 s,指的就是 sycall,所以strace 就是对 syscall 的 trace。通过这个命令,我们可以观测到一个进程访问的所有系统
调用、给这些系统调用传入的参数,以及系统调用的输出。可想而知,这样充足的信息就给系统排查工作提供了极大的帮助。
你可以想象一下,没有 strace 的时候,你只是看到了程序的表象,也就是程序想让你看到的,你才能看到(比如通过标准输出或者日志文件)。而有了 strace,程序的一举一动就全在你的视野里了,你就像有了火眼金睛,程序在明里暗里干的所有事情,都会被你知道。
除了 strace,你还知道哪些 trace 类的工具可以帮助排查呢?(来自AI-文言一心)
ptrace可以用来追踪和记录系统调用,它能够让你了解程序在执行期间发生了什么。它提供了强大的分析功能,以帮助你理解程序的执行流程和性能瓶颈。
此外,ltrace是一个类似于strace的工具,但它用于追踪库函数调用而不是系统调用。它能够追踪程序执行过程中所有调用的库函数,帮助你查找库函数调用中出现的问题。
另外,ktrace是另一个常用的trace工具,它可以追踪进程在内核态的行为。通过使用ktrace,你可以了解内核函数调用的具体情况,从而帮助你分析内核级别的错误和问题。
还有,perf是一个强大的性能分析工具,它可以用来追踪程序在各种情况下的性能瓶颈。它提供了丰富的功能,能够让你准确地了解程序的执行情况和性能特征。
安装环境和方式
操作系统环境centos7
[root@centos7 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@centos7 ~]# uname --kernel-release
3.10.0-1160.95.1.el7.x86_64
安装方式
[root@centos7 ~]# yum install --assumeyes strace
用法用量
直接在命令之前加上 strace。比如我们想知道 curl www.baidu.com 这个命令,在系统调
用层面具体发生了什么,就可以执行 strace curl www.baidu.com,然后就能看到前后的
几十个系统调用,包括打开文件的 openat()、关闭文件描述符的 close()、建立 TCP 连接
的 connect() 等等。
**执行 strace -p PID。**这样的话,你需要先找到进程的 PID,然后执行这条指令来完成追
踪。这比较适合对持续运行的服务(Daemon)进行追踪。比如,你可以先找到某个进程
的进程号,然后执行 strace -p PID,找到这个进程在系统调用方面的细节。当然,你还可
以加上各种其他参数,来达到不同的追踪效果。
我们可以对 strace 命令加上 -c 参数,这样可以统计每个系统调用消耗的时间和次数,看
看这个top系统调用,占用了多少比例。我们在 strace 前面加上
timeout 5,就可以收集 5 秒钟的数据了,命令如下:
timeout 5 strace -cp 进程号