本文转载自微信公众号《人人都是极客》,作者布道者Peter。转载本文请联系大家是极客公众号。经过前面的学习,我们知道一个task有以下几种状态,但是在使用top的时候,往往是以缩写形式显示的。这里我们总结一下。R(TASK_RUNNING),可运行状态。Linux中的Ready和Running对应于TASK_RUNNING标志。ready表示进程在队列中,还没有被调度;running表示进程正在CPU上运行;D(TASK_UNINTERRUPTIBLE),不可中断的休眠状态。是内核态中处于关键进程的进程,这些进程不能被中断,比如最常见的等待硬件设备的I/O响应。处于TASK_UNINTERRUPTIBLE状态的进程无法被信号唤醒,只能通过wakeup。由于TASK_UNINTERRUPTIBLE无法被信号唤醒,自然不会响应kill命令,即使是must-killkill-9。S(TASK_INTERRUPTIBLE),可中断睡眠状态。T(TASK_STOPPED或TASK_TRACED),暂停状态或跟踪状态。Z(TASK_DEAD-EXIT_ZOMBIE),退出状态,进程变成僵尸进程。什么是平均负载?了解一下:cat/proc/loadavg0.180.940.721/4863569查看当前系统的平均负载。前三个数字分别是1分钟、5分钟、15分钟的平均进程数。第四个的分子是正在运行的进程数,分母是进程总数;最后一个最近运行的进程ID号。也可用:uptime22:32:31up9min,1user,loadaverage:0.18,0.94,0.7222:32:31up9min,1user,loadaverage:0.18,0.94,0.72loadaverage:0.18,0.94,0.72//分别为1每分钟、5分钟和15分钟的平均进程数。我这里的PC是2个CPU,所以这里的负载比较低(如果平均负载高于2.0就是过载,平均负载低于2.0是比较正常的。)平均负载是指单位时间内系统处于可运行状态和不可中断状态的平均进程数(即上面R和D状态的平均进程数,容易忽略的进程数D状态),即平均活跃进程数,与CPU使用率没有直接关系。实际计算比较复杂,有兴趣的同学可以查看源码https://github.com/torvalds/linux/blob/master/kernel/sched/loadavg.c。平均负载不等于CPU使用率。通过上面的介绍,我们知道平均负载不仅包括正在使用CPU的进程,还包括等待CPU和等待I/O的进程。CPU使用率是单位时间内CPU繁忙程度的统计,不一定与平均负载完全对应。例如:对于一个CPU密集型进程,大量使用CPU会导致平均负载增加,此时两者是一致的;对于I/O密集型进程,等待I/O也会导致平均负载增加,但CPU占用率并不高。它必须非常高;大量等待CPU的进程调度也会导致平均负载增加,此时CPU占用率会比较高。所以这就是为什么有时候通过top发现cpu使用率不是很高,但是cat/proc/loadavg的时候负载很重。常用命令top可以查看系统CPU的状态,以百分比的形式显示。Tasks:251total,1running,243sleeping,0stopped,1zombieMem:2007724ktotal,862108kused,1145616kfree,18560kbuffersSwap:1505788ktotal,0kused,1505788kfree,415260kcached400%cpu16%user0%nice6%sys377%idle0%iow0%irq0%sirq0%hostPIDUSERPRNIVIRTRESSHRS[%CPU]%MEMTIME+ARGS5628root2005.9M3.1M2.7MR19.30.10:00.07top5614root0-20000S0.00.00:00.00[kworker/u9:0]5609root200000S0.00.00:00.00[kworker/3:2]5607root20000S.02.000]5590root0-20000S0.00.00:00.00[kworker/u9:4]5585root200000S0.00.00:00.00[kworker/u8:3]5577root0-20000S0.00.00:00.00[kworker/u9:2]5571root200000.k0:0/work]5537root200000S0.00.00:00.05[kworker/u8:1]5448root200000S0.00.00:00.67[kworker/3:1]us(usercputime):用户态占用cpu时间的比例。当该值很高时,意味着用户进程消耗了更多的CPU时间。例如,该值长期超过50%,则需要对程序算法或代码进行优化。sy(systemcputime):系统状态占用cpu时间的比例。ni(usernicecputime):用作nice权重的进程分配的用户态cpu时间的比例id(idlecputime):空闲cpu时间的比例。如果该值保持为0并且sy是我们的两倍,通常意味着系统面临CPU资源短缺。wa(wait):等待使用CPU的时间。hi(hardwareirq):硬中断消耗的时间si(softwareirq):软中断消耗的时间st(stealtime):虚拟机窃取时间vmstatvmstat用于检测系统状态,包括CPU和内存,其中非常方便系统调试。procs------------memory------------swap--------io-----system--------cpu----rbswpdfreebuffcachesisobiboincsussyidwa100114644018564415260002109500100000011464761856441526000000384001000000114610418564415260000003750010000001146724185644152600000038700100000011468481856441526000000369001000参考:https://mp.weixin.qq.com/s/UzmlGu-5n25B0wNScD50Jghttps://mp.weixin.qq.com/s/E5X9U7QIGnLCd4ETn2Ldlw
