man proc/man pidstat/...
上下文切换:
-
所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
-
而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
CPU使用率:
-
user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
-
nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
-
system(通常缩写为sys),代表内核态 CPU 时间。
-
idle(通常缩写为id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
-
iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
-
irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
-
softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
-
steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
-
guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
-
guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。
进程状态:
- R 是Running或者Runable的缩写,表示在CPU的就绪队列中,正在运行或者等待运行。
- D 是Disk Sleep的缩写,不可中断睡眠状态(Uninterruptible Sleep),一般表示进程正在和硬件交互,并且交互过程不可以被其他进程或者中断打断。
- Z 是Zombie的缩写,表示僵尸进程,也就是进程实际上结束了,但是父进程还没回收它的资源(如进程的描述符,PID等)。
- S 是Interruptible Sleep的缩写,可中断睡眠状态,表示进程因为等待某个事件而被系统挂起,当进程等待的事件发生时,它会被唤醒进入R状态。
- I 是Idle的缩写,空闲状态,用在不可中断睡眠的内核线程上。D表示硬件交互导致的不可中断进程,I表示并没有任何负载。D状态进程会导致平均负载升高,I状态进程不会。
- 第一个是T或者t,是Stopped或者Traced的缩写,表示进程处于暂停或者跟踪状态。
- X 是Dead的缩写,表示进程已经消亡,所以不会在top或者ps中看见。
如果状态是Ss+:后面的s代表这个进程是一个会话的领导进程,+ 表示前台进程组。进程组和会话用来管理一组相互关联的进程。
- 进程组:表示一组相互关联的进程,比如每个子进程都是父进程所在组的成员。
- 会话:指共享同一个控制终端的一个或多个进程组。