通过top或着uptime命令可以看到系统的平均负载,如下,分别表示过去 1 分钟、5 分钟、15 分钟的系统平均负载(之所以统计三个时间点数值,是为了更好的反映系统整体的负载趋势)
[root@k8s-master ~]# uptime
10:54:36 up 8 days, 12:31, 1 user, load average: 0.25, 0.51, 1.19
平均负载的含义:系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,这里的平均指的是指数衰减平均值,对应到进程的状态如下
可运行状态(Running或Runnable)
不可中断状态(Uninterruptible Sleep,也称为 Disk Sleep)
#查找R或D状态的进程ps aux | awk '{if($8 ~ /R|D/) print $0 }'[root@k8s-master ~]# ps aux | awk '{if($8 ~ /R|D/) print $0 }'root9 0.0 0.0 0 0 ? R Jun30 6:08[rcu_sched]
root30474 0.0 0.0 157456 1912 pts/0 R+ 11:10 0:00 psaux
root30475 0.0 0.0 113548 1232 pts/0 R+ 11:10 0:00 awk {if($8 ~ /R|D/) print $0 }
根据上述平均负载的定义,能够导致平均负载升高的场景有:
1、处于Running状态的进程大量消耗cpu(CPU密集型进程)
2、大量处于Runnable的进程,cpu会频繁进行上下文切换(寄存器、程序计数器)
操作系统管理的任务包括进程(线程),还有硬件通过触发信号,会导致中断处理程序的调用
上下文切换包括:进程上下文切换(虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态)、线程上下文切换、以及中断上下文切换
特权模式切换:用户态到内核态的上下文切换
查看系统总体的上下文切换情况
vmstat5[root@k8s-master sysstat]# vmstat 5procs-----------memory---------- ---swap-- -----io---- -syst