CPU使用率的类型,除了用户CPU、系统CPU(上下文切换)、等待I/O的CPU(比如等待磁盘的响应)以及中断CPU(包括软中断和硬中断)等。

    今天我们来看下等待I/O(一下简称iowait)的CPU问题。当iowait升高时,进程很可能得不到硬件的相应,而处于长时间不可中断状态。

   使用top命令看下进程有哪些状态:  

基础篇07:系统中出现大量不可中断进程和僵尸进程(上)--总结_top命令

    R是Running的缩写,表示进程在CPU的就绪队列中,正在运行或者正在等待运行。

    D是Disk Sleep的缩写,也就是不可中断状态睡眠,一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程打断。

    Z是Zombie的缩写,表示僵尸进程,就是进程实际已经结束,但是父进程还没回收它的资源。

    S是Interruptible Sleep的缩写,就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入R状态。

    I是Idle的缩写,也就是空闲状态。

除了上面5个状态,进程还包括以下两个状态:

    T(t):也就是Stopped的缩写,表示进程处于暂停或者跟踪状态。

    X:也就是Dead的缩写,表示进程已经消亡,所以不会在top或者ps命令中看到它。

    如果系统或硬件发生了故障,进程可能会在不可中断状态保持很久,导致系统中出现大量不可中断进程,这种情况下很可能会出现I/O等性能问题。如果父进程没有处理子进程的终止,还一直保持运行状态状态,子进程就会一直处于僵尸状态。大量的僵尸进程很可能会出现I/O等性能问题。

    top命令查看下资源使用情况:

基础篇07:系统中出现大量不可中断进程和僵尸进程(上)--总结_僵尸进程_02

     第一行的平均负载,过去1分钟、5分钟、15分钟的平均负载在减小,说明平均负载在升高;而1分钟的平均负载已经达到了系统的CPU个数,说明系统很可能已经有了性能瓶颈。

     第二行的Tasks,僵尸进程较多,说明有子进程在退出时没有被清理。

     CPU的使用情况,用户CPU和系统CPU都不高,但是iowait分别是60.5%和94.6%,有点儿不正常。

     再来看看进程情况,有两个进程处于D状态,它们可能在等待I/O,但是并不能确定是不是它们导致了iowait升高。

总结起来就是:

    1.iowait太高,导致平均负载升高,甚至达到了CPU的个数。

    2.僵尸进程不断增加,说明程序没有正确清理子进程的资源。


小结

    今天熟悉了几个必备的进程状态,用我们熟悉的ps或者top命令,这些状态包括运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)以及暂停(T)等。

    不可中断状态和僵尸状态,是我们今天学习的重点。

        1.不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处在不可中断状态,说明有I/O性能问题。

        2.僵尸进程表示进程已退出,但他的父进程还没回收子进程占据的资源。短暂的僵尸进程不用处理,长时间的可能有应用程序没有正常处理子进程的退出。