LINUX下CPU Load Average的一点研究
背景:
公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高,其实没这么简单,于是老板让我趁这个机会研究一下CPU Load Average,最近刚好想开学习LINUX的文章,就把这个当成一个起点吧。
Load Average(平均负载)基本概念:
- Load 指的是运行队列(run-queue)的长度:L = 等待进程的数目 + 运行进程的数目
- Load Average指的是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。
- Load Average反映了CPU的使用情况和申请情况.
Load Average(平均负载)和CPU占用率的区别:
- Load Average所包含的信息不是CPU的使用率状况
- 多任务环境下,系统分配时间片以后,是否使用完全使用时间片取决于进程,因此完全可能出现低CPU利用率而高Load Average的情况
Load Average的计算:
- 在多处理器系统中,负载阀值是基于内核的数量决定的。以 100% 负载计算,1.00 表示单个处理器,而 2.00 则说明有两个双处理器,那么 4.00 就说明主机具有四个处理器。超过这个阀值就表示系统过载了
- Load Average的实时计算公式:
- load(t) = load(t-1) e^(-5/60) + n (1 - e^(-5/60)),迭代计算,其中n为run-queue的长度
Linux下通过top或者uptime命令可以查看系统的Load Average,它显示的是系统在1分钟,5分钟,15分钟之内的Load Average值:
- 1分钟的平均值通常表示峰值,应该着眼于5分钟或者15分钟的平均数值
- 远程连接到一台LINUX上通过top命令查询系统的平均负载:
- 远程连接到一台LINUX上通过uptime命令查询系统的平均负载:
本文参考文章:
- http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html
- http://blog.csdn.net/naivebaby/article/details/1386577
- http://wenku.baidu.com/view/9cc0ed4ce518964bcf847c21.html
参考文章里的三篇文章写得都非常好,如果你想了解更多一点,请一定深入拜读