strace 跟踪进程中的系统调用
strace ls -l
time ll
perf
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html
https://www.cnblogs.com/arnoldlu/p/6241297.html
公司分配给我的机器的 /data 目录下执行 ls -l 或者 ll 的时候,偶尔发现特别慢,大概有 5s,对于我来说,实在是忍不了忍不了。
于是看了 /data 目录是一个新挂的盘,我猜测这是个网络盘。为了验证这个想法。于是去跟踪命令 ll 所进行的系统调用。
执行 strace ls -l
后,发现主要卡在 poll 这个系统调用上了。这就验证了我的猜想,果然是网络盘,负载过高,导致比较慢。
strace 命令
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
1. 输出参数的含义
每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
2. 参数
1 | -c 统计每一系统调用的所执行的时间,次数和出错的次数等. |
分析strace ls -l 输出
执行 strace -tt -T -v -o /tmp/strace_ll.log ls -l
之后,分析一下 strace_ll.log 文件。