在进程调度器维护的运行队列中,任何时刻至少存在一个进程,那就是正在运行的进程。而当运行队列中有不止一个进程时,就说明此时CPU比较抢手,其他进程还在等着,进程调度器应该尽快让正在运行的基础释放CPU。
通过在任何时刻查看/proc/loadavg,可以了解到运行队列的情况:
[root@andyx.net ~]# cat /proc/loadavg
0.00 0.02 0.05 1/335 3427
注意1/335这部分,其中的1代表此时运行队列中的进程个数,而335则代表此时的进程总数。
最右边的3427代表到此时为止,最后创建的一个进程ID。
接下来,请看左边的三个数值,分别是0.00 0.02 0.05,他们就是我们常说的系统负载。我们都知道,系统负载越高,代表CPU越繁忙,越无法很好地满足所有进程的需要。
但是,系统负载是如何计算而来的呢?根据定义,它是在单位时间内运行队列中就绪等待的进程数平均值,所以当运行队列中就绪进程不需要等待就可以马上获得CPU的时候,系统负载便非常低。
当系统负载为0.00时,说明任何进程只要就绪后就可以马上获得CPU,不需要等待,这时候系统响应速度最快。
那么,刚才提到的三个数值,便是系统最近1分钟、5分钟、15分钟分别计算得出的系统负载。
我们还可以通过其他方法获得系统负载,比如top、w等工具:
[root@andyx.net ~]# top
top – 15:24:25 up 99 days, 5:01, 1 user, load average: 0.13, 0.05, 0.05
[root@andyx.net ~]# w
15:24:59 up 99 days, 5:02, 1 user, load average: 0.07, 0.04, 0.05
从实现方法上看,这些工具获得的系统负载都是来源于/proc/loadavg。