专栏首页蓝天Linux的load average的含义

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 条评论
登录 后参与评论

相关文章

  • 算术运算指令

    算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。

    一见
  • struct对齐问题

    一见
  • 三种web性能压力测试工具http_load webbench ab小结

    题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://www.acme.com/sof...

    一见
  • 利用1.1.1.1进行DNS网络加速,仅需2分钟让网络更快

    NEWS 近日,Cloudflare 和 APNIC联合推出了1.1.1.1DNS网络加速。 Cloudflare 运行全球规模最大、速度最快的网络之一。APN...

    码农阿宇
  • 限制玻尔兹曼机 - 深度学习之父 Geoffrey Hinton 的神经网络第 12 课(中文字幕)

    作为深度学习祖师,Geoffrey Hinton 的每一句每一言,都使学习者如奉纶音。浓缩其毕生所学的《Neutral Network for Machine ...

    AI研习社
  • 如何使用Visual Studio Code调试PHP CLI应用和Web应用

    在按照Jerry的公众号文章 什么?在SAP中国研究院里还需要会PHP开发? 进行XDebug在本地的配置之后,如果想使用Visual Studio Code而...

    Jerry Wang
  • python富文本XSS过滤器

    前言:那天我正在开发网站最关键的部分——XSS过滤器,女神突然来电话说:“那东西好难呀,别开发了,来我家玩吧!”。我“啪”地一下把电话挂了,想让我的网站出XSS...

    phith0n
  • VC开发Windows客户端软件之旅——前言

            从第一次拖着行李入京找活,至今已工作若干年了。这些年一直追逐自己的梦想,跑过三个城市,换了三份工作,认识了很多业内的朋友。和朋友们闲聊时,发现很...

    方亮
  • 熔断器 Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑

    本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. #applyHystrixSemantics(...) 3. TryableSemaphor...

    芋道源码
  • python爬虫之三:解析网络报文xml

    本节主要是讲解在项目中怎么解析获取的xml报文并获取相关字段。 xml解析第三方库学习地址:http://www.runoob.com/python/pyt...

    py3study

扫码关注云+社区

领取腾讯云代金券