开发者社区> 问答> 正文

Load average 的值从何而来?

Load average 的值从何而来?

展开
收起
令人无语的八阿哥 2021-10-12 15:49:52 629 0
1 条回答
写回答
取消 提交回答
  • Load averages 采样是从 /proc/loadavg 中获取的:

    image.png

    如果你看到 load average 数值是 10,则表明平均有 10 个进程在运行或等待状态。有可能系统有很高的负载但是 CPU 使用率却很低,或者负载很低而 CPU 利用率很高,因为这两者没有直接关系。

    image.png

    image.png

    image.png

    从这个函数中可以看到,内核计算load采用的是一种平滑移动的算法,Linux的系统负载指运行队列的平均长度,需要注意的是:可运行的进程是指处于运行队列的进程,不是指正在运行的进程。即进程的状态是TASK_RUNNING或者TASK_ UNINTERRUPTIBLE。

    Linux 内核定义一个长度为 3 的双字数组 avenrun,双字的低 11 位用于存放负载的小数部分,高 21 位用于存放整数部分。当进程所耗的 CPU 时间片数超过 CPU 在 5秒内能够提供的时间片数时,内核计算上述的三个负载,负载初始化为 0。

    假设最近 1、5、15 分钟内的平均负载分别为 load1、load5 和 load15,那么下一个计算时刻到来时,内核通过下面的算式计算负载:

    load1 -= load1 - exp(-5 / 60) -+ n (1 - exp(-5 / 60 )) load5 -= load5 - exp(-5 / 300) + n (1 - exp(-5 / 300)) load15 = load15 exp(-5 / 900) + n (1 - exp(-5 / 900))

    其中,exp(x) 为 e 的 x 次幂,n 为当前运行队列的长度。

    资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143

    2021-10-12 16:52:04
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载