Linux跟踪错误进程
问题:在centos机器上 ps aux
或者 top -c
机器会卡死
通过跟踪ps进程:
strace -tt -T -v -o /root/strace-ps.log -s 1024 ps -aux
1
打开strace-ps.log,查看最后,发现应该是6374的子进程有问题,因为无法读取进程信息。
/proc/6374/cmdline
1
也无法打开,判断应该就是这个进程有问题。
strace ls /proc/6374
1
kill -9
此进程,一切恢复正常。
补充
strace可以跟踪到一个进程产生的系统调用,包含参数、返回值、执行消耗的时间。 strace的常用的选项以及选项对应的含义如下:
选项 | 含义 |
---|---|
-c | 统计每一系统调用的所执行的时间,次数和出错的次数等 |
-f | 跟踪由fork调用所产生的子进程 |
-t | 在输出中的每一行前加上时间信息 |
-tt | 在输出中的每一行前加上时间信息(微妙级) |
-T | 显示每一调用所耗的时间 |
-e trace=set | 只跟踪指定的系统调用。例如:-e |
-e trace=file | 只跟踪有关文件操作的系统调用 |
-e trace=process | 只跟踪有关进程控制的系统调用 |
-e trace=network | 跟踪与网络有关的所有系统调用 |
-e strace=signal | 跟踪所有与系统信号有关的 系统调用 |
-e trace=ipc | 跟踪所有与进程通讯有关的系统调用 |
-o filename | 将strace的输出写入文件filename -p pid 跟踪指定的进程pid |