strace 是什么
strace
是一款功能强大的 Linux 进程监控和诊断工具。主要作用就是:用于调试程序、解决问题、拦截和记录系统调用以及跟踪正在运行的进程。它能输出了程序如何与系统交互的过程,尤其是在无法获取源代码的情况下(那些开源工具、系统命令的调试就显得尤为重要了)。
它还可以作为调试工具,帮助解决问题。它主要用于以下目的:
1)调试程序
2)故障、排除程序
3)拦截进程的系统调用
4)记录进程的系统调用
5)进程接收到的信号
6)跟踪正在运行的进程
如果没有源代码,可以使用 strace
来分析程序如何与系统交互,以调试程序的执行。strace
工具会将每个系统调用的名称及其括在括号中的参数及其返回值返回到标准错误。
安装“strace”进程监控工具
这个需要区分不同的Linux 发行版使用指定的命令去安装。
对于 Debian/Ubuntu
$sudo apt 安装 strace如果是 CentOS/RedHat
$yum 安装 strace
使用 Strace 进程监控工具
1.获取系统调用、参数以及调用结果。
我们以 ls 命令的调试为例子:
$strace ls
注意:这里“ls”是要跟踪其系统调用的命令。
能看到详细的调用栈过程如下图
可以看出,它显示了系统调用、参数(在括号中)以及 ls 命令的调用结果。最后一行的+++ exited with 0 +++表示退出状态为 0,这意味着没有错误。如果发生错误,退出代码为-1。
2.统计系统调用的次数。
$strace-c ls
注意:这里“ls”是要跟踪其系统调用的命令。
计算系统调用次数
可以看出,它显示了每个系统调用的次数并打印总数,甚至显示每次调用的次数和所花费的时间(是不是够牛逼,看到这里有没有感觉自己跟linux 大神的差距好像也没那么大了,😄)。
3.跟踪特定或具体的系统调用。
$strace -e trace=write ls
注意:这里的“ls”是要跟踪的系统调用的命令。要跟踪的系统调用的名称是write, 上面的命令的含义是统计 ls 里面 write函数的调用。
跟踪特定或具体的系统调用
可以看出,它仅显示 write 系统调用的名称、参数和结果。
4.跟踪网络相关的系统调用
$strace -e trace=network nc -v -n 127.0.0.1 801
注意:这里的“ nc -v -n 127.0.0.1 801”是需要跟踪的系统调用的命令,需要跟踪的系统调用的名称是网络。
可以看出,它仅显示网络系统调用的名称、参数和结果。
5.跟踪与信号相关的系统调用
$strace -e trace=signal nc -v -n 127.0.0.1 801
注意:这里的“ nc -v -n 127.0.0.1 801”是需要跟踪的系统调用的命令,需要跟踪的系统调用的名称是signal。
可以看出,它只显示信号系统调用的名称、参数和结果。
6.打印每次调用的时间戳。
$strace -r ls
注意:这里“ls”是要跟踪其系统调用的命令。
可以看出,它在进入每个系统调用时显示一个相对时间戳。它记录了连续系统调用开始之间的时间差,有了它你必须能知道性能卡点在哪。
7.打印系统调用所花费的时间。
$strace -T ls
注意:这里“ls”是要跟踪其系统调用的命令。
可以看出,每次调用所花费的时间都打印在每行的末尾。
8.打印每个系统调用的挂钟时间。
$strace -t ls
注意:这里“ls”是要跟踪其系统调用的命令。
可以看出,每行的前缀好像是系统调用本身的挂钟时间。
9.打印指令指针。
$strace -i ls
注意:这里“ls”是要跟踪其系统调用的命令。
可以看出,指令指针打印在每一行输出中。
10.将输出打印到文件
$strace -o 输出.txt ls
注意:这里的“ls”是要跟踪其系统调用的命令。output.txt 是要存储输出的文件的名称。
可以看出,命令的输出存储在“ output.txt”文件中。
结论
strace
是一种用于调试和监控系统交互的多功能工具,可提供有助于排除故障和提高系统性能的详细见解。
通过我们的在线 Linux 课程和认证释放 Linux 的强大功能!无论是初学者还是经验丰富的专业人士,看完我们的linux工具系列,都可以成功驾驭它。
准备好成为 Linux 专家了吗? 如果看完有收获,感谢您的关注,点赞以及评论。
期待您的反馈,我们将再接再励。