Advertisement

Linux:到底应该怎么理解“平均负载”?

阅读量:

每次发现系统变慢时,通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载 情况。比如像下面这样,系统也随即给出了结果。

复制代码
    $ uptime
    02:34:03 up 2 days, 20:14,  1 user,  load average: 0.63, 0.83, 0.88
    
    
    AI写代码bash

load average: 0.63, 0.83, 0.88:依次是过去 1 分钟、5 分钟、15 分钟的平均负载 (Load Average)。

平均负载 是指单位时间内 ,系统处于可运行状态不可中断状态平均进程数 ,也就是平均活跃进程数它和 CPU 使用率并没有直接关系

  • 可运行状态的进程 :是指正在使用 CPU 或者正在等待 CPU 的进程,常用 ps 命令看到的,处于 R 状态Running 或 Runnable )的进程。
  • 不可中断状态的进程 :是正处于内核态关键流程 中的进程,并且这些流程是不可打断 的,比如最常见的是等待硬件设备的 I/O 响应 ,在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep )的进程。

平均负载其实就是平均活跃进程数 。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数

既然平均的是活跃进程数 ,那么最理想的,就是每个 CPU 上都刚好运行着一个进程 ,这样每个 CPU 都得到了充分利用

平均负载为多少时合理

平均负载最理想的情况是等于 CPU 个数 。所以在评判平均负载时,首先你要知道系统有几个 CPU ,这可以通过 top 命令或者从文件 /proc/cpuinfo 中读取,比如:

复制代码
    # 关于grep和wc的用法请查询它们的手册或者网络搜索
    $ grep 'model name' /proc/cpuinfo | wc -l
    2
    
    
    AI写代码bash

有了 CPU 个数 ,当平均负载比 CPU 个数还大的时候,系统已经出现了过载 。uptime提供了三个平均负载数值,三个不同时间间隔的平均值 ,提供分析系统负载趋势的数据来源

  • 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
  • 但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
  • 反过来,如果 1 分钟的值远大于 15 分钟的值 ,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数 ,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
平均负载与 CPU 使用率

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计 ,跟平均负载并不一定完全对应。比如:

  • CPU 密集型进程 ,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
  • I/O 密集型进程 ,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
  • 大量等待 CPU 的进程调度也会导致平均负载升高 ,此时的 CPU 使用率也会比较高。
分析工具

下方两个工具在sysstat包中:

  • mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
  • pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

centos系统安装:

复制代码
    yum install sysstat -y
    
    
    AI写代码bash

ubunt系统安装命令:

复制代码
     apt install sysstat
    
    
    AI写代码bash

全部评论 (0)

还没有任何评论哟~