Linux的load average的含义

简介: Linux AS3.0 top命令的Load average 含义及性能参考基值 ? 下面文章中的      “  数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。

Linux AS3.0 top命令的Load average 含义及性能参考基值 ?

下面文章中的      “  数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU的数目,结果高于5的时候就表明 系统在超负荷运转了。”   

具体是什么意思, 如果是cpu为8颗(双核,4核不知道如何算),目前load average 为: 20.22,20.03,18.99 应该不算超负荷运作了 ?
======================================================
$ uptime
11:12:26 up 3:44, 4 users, load average: 0.38, 0.31, 0.19
上面的输出,load average后面分别是1分钟、5分钟、15分钟的负载情况。数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转了。其算法(摘自 Linux 2.4的内核代码)如下:

文件: include/linux/sched.h:

#define FSHIFT 11 /* nr of bits of precision */
#define FIXED_1 (1#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point, 2048/pow(exp(1), 5.0/60) */
#define EXP_5 2014 /* 1/exp(5sec/5min), 2048/pow(exp(1), 5.0/300) */
#define EXP_15 2037 /* 1/exp(5sec/15min), 2048/pow(exp(1), 5.0/900) */

#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;

/**********************************************************/

文件: kernel/timer.c:
unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;

count -= ticks;
if (count count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}

/**********************************************************/

文件: fs/proc/proc_misc.c:

#define LOAD_INT(x) ((x) >> FSHIFT)
#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100)

static int loadavg_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
int a, b, c;
int len;

a = avenrun[0] + (FIXED_1/200);
b = avenrun[1] + (FIXED_1/200);
c = avenrun[2] + (FIXED_1/200);
len = sprintf(page,"%d.%02d %d.%02d %d.%02d %ld/%d %d\n",
LOAD_INT(a), LOAD_FRAC(a),
LOAD_INT(b), LOAD_FRAC(b),
LOAD_INT(c), LOAD_FRAC(c),
nr_running(), nr_threads, last_pid);
return proc_calc_metrics(page, start, off, count, eof, len);
}
 
======================================================
 
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
??- 它没有在等待I/O操作的结果
??- 它没有主动进入等待状态(也就是没有调用'wait')
??- 没有被停止(例如:等待终止)

下面这个是算法,数学不好,看的不太懂,资料上是这么说的\

load average怎么计算?

   为 了使内核可以高效计算load average,采用了fixed-point arithmetic。fixed-point arithmetic是一种非常快速的模拟浮点运算的方法,特别是在没有FPU(float point unit)部件的处理器上,非常有用。

计算公式:load(t) = load(t-1) e^(-5/60) + n (1 - e^(-5/60)),迭代计算,其中n为run-queue length。

为什么采用这个计算公式呢?

由Exponential Smoothing方程有,Y(t)= Y(t-1) + a*[X(t) - Y(t-1)],whereX(t) is the input raw data, Y(t - 1) is the value due to the previoussmoothing iteration and Y(t) is the new smoothed value.

令a=1-b,b为e^(-5/60),就可以得到load average的计算公式

采用此公式的好处:局部的load抖动不会对load average造成重大影响,使其平滑。
相关文章
|
9月前
|
Linux 调度
Linux系统Load Average解析
很多小伙伴在遇到某一接口服务性能问题时,比如说,TPS上不去、响应时间拉长、应用系统出现卡顿,某一请求出现超时等等现象,往往显得苍白无力,无从下手。 针对系统负载性能,很大一部分人潜意识会认为CPU使用率等同系统负载,或者直接反应系统负载情况,这种理解对吗?本文将从2个纬度合理进行分析系统负载以及CPU与Load Average之间的关联。
86 0
|
弹性计算 算法 Java
一文说清linux system load averages
深入浅出阐释linux system load averages的语义,算法和计算流程,并分享了实际load飙高问题的排查经验和心得。
一文说清linux system load averages
|
Linux Windows
linux ls -la文件信息含义
linux ls -la文件信息含义
230 0
linux ls -la文件信息含义
|
Ubuntu Linux
[Linux] 输入命令ls -laF后的各字段含义解析
在登陆Ubuntu之后,我们切换超级管理用户root: su root 然后切换到其所在的主目录: cd ~ 然后以该目录下的所有文件以及文件夹为例进行介绍,我们输入命令查看该目录下面的所有文件以及文件夹(包括隐藏文件): ls -laF 然后显示的内容为:
138 0
[Linux] 输入命令ls -laF后的各字段含义解析
|
存储 Linux 开发工具
9.5 Linux读写执行权限(-r、-w、-x)的真正含义是什么?
通过前面的学习,我们知道了给文件设定权限的重要性,也知道了如何给文件设定权限。那么,读(r)、写(w)、执行(x)权限到底指的是什么呢?
629 1
9.5 Linux读写执行权限(-r、-w、-x)的真正含义是什么?
|
SQL 弹性计算 算法
一文说清linux system load
双十一压测过程中,常见的问题之一就是load 飙高,通常这个时候业务上都有受影响,比如服务rt飙高,比如机器无法登录,比如机器上执行命令hang住等等。本文就来说说,什么是load,load是怎么计算的,什么情况下load 会飙高,load飙高是不是必然业务受影响。
一文说清linux system load
|
Web App开发 移动开发 网络协议
Linux netstat命令详解及state的含义
Linux netstat命令详解及state的含义
595 0
|
机器学习/深度学习 网络协议 安全
linux 安装 ftp并配置用户目录-ftp报错数字含义
linux 文件传输--自动化部署ftp
257 0
|
缓存 Linux API
Linux Load Average那些事儿
本文主要是对平均负载(load average)的含义进行剖析,并对linux上的实现做了一些考证工作。load avg的wikipedia解释为:系统需要进行处理的工作量,具象则可以表述为系统上正在运行(running)和已经ready且等待调度(runnable)的进程数之和
Linux Load Average那些事儿