Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 操作系统 / Linux / 判断Linux load的值是否过高

接触过和使用过unix或linux的朋友,都知道如何查看Unix/Linux load的值,这边我也重复一下查看load的方法:[root@www.linuxidc.com ~]# uptime
13:33:37 up 7 days, 1:52, 1 user, load average: 4.15, 2.00, 3.14
[root@www.linuxidc.com ~]# w
13:35:35 up 1 days, 1:54, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.2.2 13:33 0.00s 0.02s 0.00s w
load average 后面三个值代表系统在1分钟、5分钟和15分钟的负载情况,都知道数字越高表示系统负载越大,第一直觉就是这个系统不行了。load average 是0的时候都认为他很低,10的时候就觉得高,20就不用讲了!但是除了这两种极端的情况之外,那什么时候是这两个值的临界点?当别人问起我这个问题的时候,我也不知道如何回答,在我大脑里就根本就没有考虑过。困扰了我很久,我觉得要搞明白他!先从linux的kernel的源码开始吧!在linux 2.6.36版本中有这样一段代码:/**
* spu_calc_load – update the avenrun load estimates.
*
* No locking against reading these values from userspace, as for
* the CPU loadavg code.
*/
static void spu_calc_load(void)
{
unsigned long active_tasks; /* fixed-point */active_tasks = count_active_contexts() * FIXED_1;
CALC_LOAD(spu_avenrun[0], EXP_1, active_tasks);
CALC_LOAD(spu_avenrun[1], EXP_5, active_tasks);
CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);
}CALC_LOAD是这样定义:#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */#define CALC_LOAD(load,exp,n)
load *= exp;
load += n*(FIXED_1-exp);
load >>= FSHIFT;从这里我们能看到取负载值的最小周期5秒,根据代码中定义我们知道什么是load?load的就是一定时间内计算机有多少个active_tasks,也就是说是计算机的任务执行队列的长度,cpu计算的队列。load多少是正常?既然load是cpu计算的队列,那就应该和cpu个处理方式和cpu的个数有关系。所以我个人认为应该按系统识别的cpu个数来确定load的临界值,系统识别为8个cpu,那么load为8就是临界点,高与8就属于over load了。什么叫系统识别cpu个数?我是这样认为的,这里涉及到cpu物理个数和超线程技术的问题。个人认为4个物理cpu和2个双核是不能够等同的,当然这是物理层面的事了!在系统里识别的都是4个CPU.所以应该要以系统识别的为准。毕竟是系统去支配他的使用。CPU高不等同于load高在Unix/Linux可能经常会遇到cpu的使用率为100%,但是load却不高!这是为什么呢?因为几乎所有的任务和会和CPU进行交互,但是由于各个设备的使用频率不同,造成了不能同步进行的问题。比如说,当对硬盘进行读写的时候,出现IO的等待时候,事实上cpu已经被切换到别的进程上了。该任务就处于等待状态,当这样的任务过多,导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去干执行别的任务或空闲,因此CPU高不等同于load高,load高也不能于cpu高。 恢复Ubuntu下的Grub引导系统菜单Ubuntu 11.04下Emerald不能用的问题解决相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数