zoukankan      html  css  js  c++  java
  • 理解系统负载

    本文转载自理解系统负载

    导语

    topuptime 等命令会输出系统的平均负载 (Load Average),一般会有三个值,分别代表 1 分钟,5 分钟和 15 分钟的平均负载。那“负载”又是什么含义呢?

    一般搜索得到的结果都会有一个“桥”或是“公路”的类比,虽然形象但却不准确,其实直接阅读维基百科 Load (Computing) 就能知道差不多信息。这里在维基的基础上简单梳理。

    进程计数与采样

    负载记录的是 CPU 的负荷,能对 CPU 造成负荷的是进程(包括线程)的执行。负载的数值代表的是 CPU 还没处理完的进程的数目。

    空闲的系统负载为 0。当一个进程正在被 CPU 执行或即将要被执行(即进入等待执行的队列)时,系统的负载加 1;执行完成1 时负载减 1。从这种角度看有点像是高速公路,进去时取卡,出来时还卡,然后计算高速上一共有多少车辆。当然还有一些特殊情况(如有些系统对线程的计算方式不同)这里就不展开了。

    现在我们能计算某个时刻系统的负载。Linux 会每隔 5s 的时间检查一下当前系统负载,并求它们的平均数。因此要是仔细查看的话,负载的值是每 5s 变化一次。

    移动平均

    炒股的朋友们应该知道 5 日均线,20 日均线什么的,系统的负载采用的也是类似的技术,具体用的是指数移动平均,计算方法如下:

    S(0) = 0
    S(t) = a * X(t) + (1-a)*S(t-1)
    

    其中,X(t) 为最近一次采样的值,a 为最近采样值占的比重,S(t) 则是系统最近一次采样的负载。

    指数移动平均的计算方式会累计历史所有的采样值,但离现在越久,占的比重越小。更具体的,Linux 系统上对 1 分钟的平均负载取 a 的取值21 - e^(-5/60),5 分钟为 1 - e^(-5s/5min),以此类推。

    以一分钟为例,上面的取值能达到的效果是,最近一分钟的采样占所有历史值的比重约为 63%(准确值为 1 - 1/e),5 分钟和 15 分钟也一样。

    系统负载与 CPU 占用率

    两个相同的系统,一个负载是 3,一个负载是 6,如果只看 CPU 占用率,大家都是 100% ,能看出哪个系统当前的压力大吗?高负载时一般 CPU 都是 100%,要了解系统的压力,负载指标就比 CPU百分比更有意义。当然 CPU 占用率的细节(如 ussy 等指标)对于排查问题还是很有帮助的。

    负载与 CPU 核数

    单核满载是 1,有 n 核满载是 n。一般说线上运行的系统大于 0.7 的时候就要注意了,超过 1.5 应该就会有人打电话找你了。

    小结

    总觉得这是一个好像很厉害但却没什么卵用的知识:

    • 系统负载统计的是运行和等待运行的进程/线程数
    • Linux 下是 5s 一采样并计算移动平均
    • 一分钟指数移动平均用到了不止近一分钟的采样数据
    • n 核,满载的负载就是 n

    参考


    1. 1.这里指的是时间片执行完成,而不是指进程退出。
    2. 2.Linux 采用了近似算法来算指数,具体可以看维基
  • 相关阅读:
    Park Visit
    1894: 985的方格难题
    985的数字难题
    Highways
    最短路
    SQL内容补充
    8.前端资源优化
    7.CSRF攻击和文件上传漏洞攻击
    6.XSS攻击方式及防御措施
    5.避免重复提交表单
  • 原文地址:https://www.cnblogs.com/yungyu16/p/13192095.html
Copyright © 2011-2022 走看看