Bootstrap

Linux下使用strace,pstack,pstree,lsof 等工具跟踪进程

Strace功能说明

Strace命令是一种强大的工具,能够显示任何由用户空间发出的系统调用。Strace显示这些调用的参数并返回符号形式的值。

下面记录几个常用的option:

-f选项告诉strace同时跟踪fork和vfork出来的进程。

-o**.txt输出到某个文档。

-e execve只记录execve这类系统调用。

-p pid trace一个现有的进程。

Pstack功能说明

Pstack是一个脚本工具,其核心实现是使用了gdb以及threadapply all bt 命令,下面使用pstack查看进程函数堆栈。

Pstack pid

Pstree功能说明

Pstree命令以树状图显示进程间的关系(displaya tree of processes)。Ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系显示的并不清晰。在linux系统中,系统调用fork可以传建子进程,通过自shell可以创建子进程,Linux系统中进程间的关系天生是一棵树,数的跟就是进程PID为1的init进程。

格式:pstree

以树状图显示进程,只显示进程的名字,且相同进程合并显示。

 格式:pstree -p

以树状图显示进程,还显示进程PID。

 格式:pstree <pid>

格式:pstree -p<pid>

以树状图显示进程PID为<pid>的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID。

 格式:pstree -a

以树状图显示进程,相同名称的进程不合并显示,并且会显示命令行参数,如果有-p参数则同时显示每个进程的PID。

 因为pstree输出的信息可能比较多,所以最好与more/less配合使用。其功能与ps -Lf类似。

Lsof功能说明

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

lsof输出各列信息的意义如下:

COMMAND:进程的名称 PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

TYPE:文件类型,如DIR、REG等

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点(文件在磁盘上的标识)

NAME:打开文件的确切名称

lsof指令的用法如下:

lsof abc.txt 显示开启文件abc.txt的进程

lsof 目录名 查找谁在使用文件目录系统

lsof -i :22 知道22端口被哪个进程占用

lsof -c abc 显示abc进程现在打开的文件

lsof -g gid 显示归属gid的进程情况

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof -p 12 看进程号为12的进程打开了哪些文件

lsof -u username 查看用户打开哪些文件

lsof -i @192.168.1.111 查看远程已打开的网络连接(连接到192.168.1.111)

lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新

-r,lsof会永远不断的执行,直到收到中断信号

+r,lsof会一直执行,直到没有档案被显示






;