Linux工具-strace
参考文献
strace
-
strace
命令用于跟踪系统调用和信号.主要用于诊断,调试程序,使用该命令能够打印出进程执行的系统调用信息. -
strace
常用选项如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18strace -fT -tt -yy [-p 进程号]
-f 跟踪子进程
-T 系统调用执行耗时,行尾展示
-tt 开始执行时间,精度ms,行首展示
-r 打印相对耗时
-yy 打印fd信息,对于文件会打印/文件名,对于socket会打印四元组
-o 打印记录到文件
-ff 搭配-o时使用,同时记录子进程跟踪结果
root@holelin:~# ps -ef |grep sshd
root 794 1 0 04:21 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 1954 794 1 07:32 ? 00:00:01 sshd: root@pts/1
root 2106 794 0 07:33 ? 00:00:00 sshd: root@pts/0
root 2199 2082 0 07:34 pts/1 00:00:00 grep --color=auto sshd
root@holelin:~# strace -fT -tt -yy -p 794
strace: Process 794 attached
07:34:05.977817 pselect6(7, [3<TCP:[0.0.0.0:22]> 4<TCPv6:[[::]:22]>], NULL, NULL, NULL, NULL
示例
找出应用程序启动时读取的配置文件
1 | strace mysql 2>&1 |grep my.cnf |
查找为什么程序没有打开指定文件
1 | $ strace -e open,access 2>&1 |grep your-filename |
-
-e
参数指定了一个限定表达式用于指定要跟踪的事件和如何跟踪它们.1
[qualifier=][!]value1[,value2]...
- 这里的
qualifier
可选值为:trace
,abbrev
,verbose
,raw
,signal
,read
,write
.默认的qualifier
是trace
.
- 这里的
查看进程的哪些操作比较耗时
1 | strace -c >/dev/null ls |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!