Linux的load average的含义

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 < 0) { 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造成重大影响,使其平滑。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch查询——布尔查询Bool Query

Elasticsearch在2.x版本的时候把filter查询给摘掉了,因此在query dsl里面已经找不到filter query了。其实es并没有完全抛...

24770
来自专栏ATYUN订阅号

自定义对象检测问题:使用TensorFlow追踪星球大战中的千年隼号宇宙飞船

大多数的大型科技公司(如IBM,谷歌,微软,亚马逊)都有易于使用的视觉识别API。一些规模较小的公司也提供类似的产品,如Clarifai。但没有公司能够提供对象...

49950
来自专栏人工智能LeadAI

毫秒级检测!你见过带GPU加速的树莓派吗?

1K100
来自专栏生信小驿站

可视化 坐标系统

ggplot2可以通过coord_flip()切换x和y轴。例如,如果你想要水平箱形图。 这对长标签也很有用:很难让它们在x轴上不重叠的情况下适合。

9620
来自专栏实用工具入门教程

如何部署 TensorFlow 服务器

TensorFlow是一款由Google构建的用于训练神经网络的开源机器学习软件。TensorFlow的神经网络以有状态数据流图的形式表示。图中的每个节点表示神...

71830
来自专栏生信小驿站

R语言之可视化⑩坐标系统目录

ggplot2可以通过coord_flip()切换x和y轴。例如,如果你想要水平箱形图。 这对长标签也很有用:很难让它们在x轴上不重叠的情况下适合。

13430
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 17 - Step By Step上手TensorBoard

上一篇16 L2正则化对抗“过拟合”提到,为了检测训练过程中发生的过拟合,需要记录每次迭代(甚至每次step)模型在训练集和验证集上的识别精度。其实,为了能更...

37280
来自专栏人工智能LeadAI

TensorFlow从0到1 | 第十七章 Step By Step上手TensorBoard

上一篇 16 L2正则化对抗“过拟合 ”提到,为了检测训练过程中发生的过拟合,需要记录每次迭代(甚至每次step)模型在训练集和验证集上的识别精度。其实,为了能...

57170
来自专栏瓜大三哥

优化策略之PowerOptimization

opt_design[-retarget][-propconst][-sweep][-bram_power_opt][-remap]

8910
来自专栏哲学驱动设计

090615 T 数据库范式

帮助记忆五级范式:     一级范式:         消除每个表格中重复的组。         为每套相关的数据建立一个独立的表格。         使用一个...

20850

扫码关注云+社区

领取腾讯云代金券