Linux/Unix中的load average

简介:

使用top命令时,我们会看到第一行有个

1 load average: 0.01, 0.01, 0.00

当然,别的命令也看的到,比如uptime,w。

使用strace追踪uptime很容易发现这三个数据来自/proc/loadavg文件。另几个命令也是通过读取这个文件得到的。

1 strace -eopen uptime
2 #省略掉无关内容
3 open("/proc/loadavg", O_RDONLY)         = 4

load average是什么:

三个数字分别显示系统在1分钟,5分钟,15分钟之内的load情况。

load表示cpu就绪队列中任务数量,也就是等待cpu的进程数。当然,三个值是取得平均值,还有平滑处理。为什么强调是就绪队列,因为这里的进程等待的就是cpu,这可以看出cpu的压力。

通常情况,这个值应该在cpu核数的2倍以内

可以通过以下命令查看cpu核心数。

1 grep 'model name' /proc/cpuinfo wc -l

load average如何得到:

三个数字是由内核计算出的。如果光是得出就绪队列长度,内核中必然有个现成的值。但是这三个值是平均值,平均则需要采样再计算。每隔5秒计算一次平均负载值

前面说过,这个不是单纯的平均,还使用了平滑处理。

Exponential Smoothing方程:

公式源自Exponential Smoothing方程。Y(t)= Y(t-1) + a*[X(t) – Y(t-1)];

X(t)是原始数据,即就绪队列长度,a是一个用于平滑的值。在这里a用1-e^(-5/p)代入,p对应60,300,900。(就是三个时间间隔)

1 load1 = load1 * exp(-5 / 60) + n * (1 – exp(-5 / 60 ))
2 load5 = load5 * exp(-5 / 300) + n * (1 – exp(-5 / 300))
3 load15 = load15 * exp(-5 / 900) + n * (1 – exp(-5 / 900))
4 //exp表示e的指数。n代表的是active_tasks,即当前就绪队列长度。
5 //当然,真的代码里这几个exp的值都是预先计算好了的。
6 #define EXP_1 1884 /* 1/exp(5sec/1min) */
7 #define EXP_5 2014 /* 1/exp(5sec/5min) */
8 #define EXP_15 2037 /* 1/exp(5sec/15min) */

可以看出,移动平均间隔越大,值对移动平均的影响趋向减小。局部的load抖动不会对load average造成重大影响,使其平滑。

fixed-point arithmetic(定点算数):

因为Linux内禁止浮点运算,因此系统的负载只能通过计算变化的次数这一修 正值来计算。

Linux内核定义一个长度为3的双字数组avenrun,以计算三个负载,双字的低11位用于存放负载的小数部分,高21位用于存放整数部分。

1 #define FSHIFT      11          /* nr of bits of precision */
2 #define FIXED_1     (1<<FSHIFT) /* 1.0 as fixed-point(定点) */

有点类似于把小数乘以10000,然后当整数运算。最后再除以10000和取模得到小数。

 

转载请注明:旅途@KryptosX » Linux/Unix中的load average

目录
相关文章
|
6月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
74 0
|
1月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
Ubuntu 安全 Unix
在Linux中,有哪几种linux/unix发行版本?
在Linux中,有哪几种linux/unix发行版本?
|
3月前
|
Ubuntu Unix Linux
在Linux中,Unix和Linux之间的关系是什么?
在Linux中,Unix和Linux之间的关系是什么?
|
3月前
|
并行计算 Linux TensorFlow
【Deepin 20系统+Tensorflow 2】Linux系统解决Could not load dynamic library ‘libcudart.so.10.0‘
本文描述了在Deepin 20系统中使用TensorFlow 2时遇到GPU未被利用的问题,并给出了相关的调试日志信息。
53 2
|
3月前
|
Unix Linux 程序员
Unix:Linux的“逗趣祖师爷”与它的不凡传承
在科技长河中,Unix犹如一颗恒星,既是历史见证者也是未来的启发者。1969年,因程序员肯·汤普森想在他的PDP-7上玩“Space Travel”游戏,意外创造了Unix,以简洁优雅的代码改变了操作系统的世界。进入90年代,林纳斯·托瓦兹受Unix启发,开发了开源免费的Linux,像是Unix调皮的孙子,不仅继承其精髓还增添了开放共享的精神。Unix与Linux之间的传承,就像是智者与追蝶孩童的故事,充满了岁月的智慧与新生的活力,提醒我们科技传奇往往源于不起眼的小事。下次使用Linux时,不妨会心一笑吧!
54 0
|
3月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
50 0
|
3月前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
143 0
|
6月前
|
安全 Unix Linux
【专栏】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录
【4月更文挑战第28天】`rmdir`命令在Linux和类Unix系统中用于删除空目录,不适用于非空目录。基本语法为`rmdir [options] directory...`,常用选项包括`-p`(递归删除空父目录)和`--ignore-fail-on-non-empty`(忽略非空目录错误)。与`rm -r`相比,`rmdir`更安全,适用于知道目录为空的情况。在自动化脚本和清理构建目录等场景中,`rmdir`能有效管理空目录。使用时确保目录为空,避免误删,必要时结合`ls`和`sudo`检查或提升权限。
97 1
|
6月前
|
Oracle Ubuntu Unix
Unix与Linux区别
Unix: Unix是一个操作系统家族的名称,最早由贝尔实验室(Bell Labs)的肖像电机公司(AT&T)开发。最早的Unix版本是在1969年创建的。 Linux: Linux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。
114 1