1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| 进程常见的五种状态: (1)R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。
(2)D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
注意:进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
(3)Z 是 Zombie 的缩写,如果你玩过“植物大战僵尸”这款游戏,应该知道它的意思。它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
(4)S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。
(5)I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高,I 状态的进程却不会。
进程不常见的两种状态: 1)T 或者 t,也就是 Stopped 或 Traced 的缩写,表示进程处于暂停或者跟踪状态。
向一个进程发送 SIGSTOP 信号,它就会因响应这个信号变成暂停状态(Stopped);再向它发送 SIGCONT 信号,进程又会恢复运行(如果进程是终端里直接启动的,则需要你用 fg 命令,恢复到前台运行)。
而当你用调试器(如 gdb)调试一个进程时,在使用断点中断进程后,进程就会变成跟踪状态,这其实也是一种特殊的暂停状态,只不过你可以用调试器来跟踪并按需要控制进程的运行。
(2)X,也就是 Dead 的缩写,表示进程已经消亡,所以你不会在top 或者 ps 命令中看到它。
注意:Ss+:S表示可中断睡眠状态,s表示这个进程是一个会话的领导进程,而+表示前台进程组。
安装dstat (1)CentOS:yum install -y dstat
(2)Ubuntu:apt install dstat dstat是一个新的性能工具,它吸收了vmstat、iostat、ifstat等几种工具的优点,可以同时观察系统的CPU、磁盘I/O、网络以及内存使用情况。
(1)dstat 1 10 (间隔1秒输出10组数据)
(2)pidstat -d -p 4344 1 3 (-d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据)
(3)strace -p 6082 (-p指定进程号)Strace最常用的跟踪进程系统调用的工具。
(4)perf record -g(终端运行十五分钟左右,再ctrl+c)
(5)perf report
僵尸进程的处理 要解决僵尸进程,就要找到它的根儿,也就是找出父进程,然后在父进程里解决。
(1)pstree -aps 3084(-a表示输出命令行选项,p表示PID,s表示指定进程的父进程)
(2)接着查看 app 应用程序的代码,看看子进程结束的处理是否正确,比如有没有调用wait() 或 waitpid() ,抑或是,有没有注册 SIGCHLD 信号的处理函数。
|