2014-06-15

what

  • 什么是Load Average

    Load是计算机工作量的度量。Load Average就是一段时间内(1分钟,5分钟,15分钟)系统Load的平均值。简单来说,就是一段时间内(1分钟,5分钟,15分钟)运行队列里等待的进程数加上当前正在执行的进程数。

    可以通过uptime命令查看。

    uptime
    
    21:45  up 22:37, 3 users, load averages: 1.81 1.79 1.58
    
  • 哪些进程被统计在内

    一个空闲的计算机load值为0,每一个使用或者等待CPU的进程使Load值增1。大多数UNIX系统仅仅计算处于正在运行或者等待运行(running or runnable)状态的进程。但是Linux同样包括处于不可中断(uniterruptible)状态的进程(通常是等待I/O),如果系统上有许多进程因为I/O繁忙被阻塞会导致不同的结果。这样的情况下Load Average会很高,但不能反应CPU实际使用增加(可能CPU使用率会很低,但是依然反应出用户需要等待多长时间)。

  • 是统计进程还是线程

    在现代操作系统中,对线程的不同实现导致Load Average计算的不同。这实际是跟不同线程模型相关的。为了计算Load一些系统视线程为进程:那么每个等待的线程都会使Load值增1。但是其他系统可能不同,尤其是对于实现M:N这种线程模型的系统通常使用不同的策略,对于Load计算有的是按照每个进程恰好一次(无论线程数量),有的是仅仅计算用户线程调度器暴露给内核的线程数(这可能取决于处理器的并发量)。Linux系统应该是每个线程单独Load增1。

  • 一个类比

    明白上述两点就知道了Load计算的实体是什么,关键是针对不同的系统有不同的实现。对于Load的理解,在这篇文章中有个通俗的解释。

    一只单核的处理器可以比喻成一条单车道。设想你是这条道路的交警,你来规划车辆怎么通过。如果前面没有车辆在等待,那么你可以告诉后面的司机通过。 如果车辆众多,那么需要告诉他们稍等一会。

    于是,对于车流情况有特定的描述,例如:

    0.00 表示目前道路上没有任何的车流。 实际上这种情况与 0.00 到 1.00 之间是相同的,很通畅,过往的车辆可以丝毫不用等待的通过。

    1.00 表示刚好是在这条道路的承受范围内。 这种情况不算糟糕,只是车流会有些堵,不过这种情况可能会造成交通越来越慢。

    超过 1.00,那么说明这条道路已经超出负荷,交通严重的拥堵。 那么情况有多糟糕? 例如 2.00 的情况说明车流已经超出了桥所能承受的一倍,那么将有多余过桥一倍的车辆正在焦急的等待。3.00 的话情况就更不妙了,说明这条道路基本上已经快承受不了,还有超出道路负载两倍多的车辆正在等待通过。

  • 两个比较

    Load Average是系统负荷的重要度量指标,另一个同样经常被使用的则是CPU使用率。这里简单的进行比较。

    • Load Average度量的是CPU使用的趋势,而不像CPU使用率那样是瞬时快照
    • Load Average包含了所有对CPU的需求,而不仅仅是度量时间点的活跃程度

    对于均衡负载来说,基于CPU队列长度的CPU Load信息会比CPU使用率更好。原因大概是对于Load很高的主机,CPU使用率可能接近100%,这时的利用率不能反应负载的级别。相反,CPU队列长度能直接反应这个CPU的负载总量。一个简单的例子就是:对于两个不同的系统,一个有3个进程在等待队列一个有6个进程在队列,它们的CPU利用率都可能接近100%。

    对于CPU利用率和CPU Load Average的结果来判断性能问题。首先低CPU利用率不表明CPU不是瓶颈,竞争CPU的队列长期保持较长也是CPU超负荷的一种表现。对于应用来说可能会去花时间在I/O,Socket等方面,那么可以考虑是否后这些硬件的速度影响了整体的效率。


when

  • 什么时候注意Load Average

    什么样的负载是理想负载, 1.00就很理想吗。有经验的管理员把理想负载设在0.7。于是有了单核处理器三个准则。对于多核(多处理器、多核数)需要用Load来除以总核数。然后按照单核的标准来看。

    • 单核

      • 当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
      • 当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
      • 当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。
    • 多核

      • 多核CPU与多CPU效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个CPU、每个CPU有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过1.0,就表明电脑正常运行。

where

  • 哪些地方有Load Average

    • w
    • uptime
    • top
    • htop
    • iftop
    • vmstat
    • iostat
    • mpstat
    • netstat
    • dstat
    • xload
    • tload
    • /proc/loadavg

refenerce



blog comments powered by Disqus