0
点赞
收藏
分享

微信扫一扫

基础篇02:到底应该怎样理解“平均负载”

一、平均负载定义

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

二、平均负载多少合理

   平均负载最理想的情况是等于CPU个数。所以在评判平均负载时,首先你要知道系统有几个CPU,可以通过top命令或者从文件/proc/cpuinfo中读取。有了CPU个数,我们就可以判断出,当平均负载比CPU个数还大的时候,系统已经出现了过载。

  平均负载有三个数值,分析系统负载趋势的时候,三个都要看。

  (1)如果1分钟、5分钟、15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。

  (2)如果1分钟的值远小于15分钟的值,就说明系统最近1分钟的负载在减少,而过去15分钟内有很大的负载。

  (3)如果1分钟的值远大于15分钟的值,就说明最近1分钟的负载在增加,这种增加可能是临时的,也可能还会持续增加下去,所以需要持续观察。一旦1分钟的平均负载超过CPU的个数,就意味着正在发生过载的问题,这时就需要调查哪里出了问题,并想办法优化。

  正常情况下,当平均负载高于CPU数量70%的时候,就要分析排查负载高的问题了。

三、平均负载与CPU使用率

   CPU使用率跟平均负载不一定完全对应。比如:

  (1)CPU密集型进程,使用大量CPU会导致平均负载升高,此时两者是一致的。

  (2)I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高。

  (3)大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高。

四、平均负载案例分析

  使用iostat、mpstat、pidstat等工具,找出平均负载升高的根源。

   (1)mpstat是一个常用的多核CPU性能分析工具,用来实时查看每个CPU的性能指标以及所有CPU的平均指标。

   (2)pidstat是一个常用的进程性能分析工具,用来实时查看进程的CPU、内存、I/O以及上下文切换等性能指标。

 可以用uptime命令查看平均负载情况:

      基础篇02:到底应该怎样理解“平均负载”_性能分析工具


  场景一:CPU密集型进程

       使用stress命令模拟一个CPU使用率100%的场景:

      基础篇02:到底应该怎样理解“平均负载”_性能分析工具_02 

       接着在第二个终端运行uptime查看平均负载的变化情况:

         基础篇02:到底应该怎样理解“平均负载”_性能分析工具_03

        最后在第三个终端运行mpstat查看CPU使用率的变化情况:

            基础篇02:到底应该怎样理解“平均负载”_性能分析工具_04

        从终端二中可以看到,1分钟的平均负载会慢慢增加到1.00,二从终端三可以看到有个CPU的使用率是100%,但是他的iowait只有0.说明平均负载的升高正是由于CPU使用率为100%。

       那么是哪个进程导致了CPU使用率为100%呢?可以使用pidstat来查询:

  基础篇02:到底应该怎样理解“平均负载”_性能分析工具_05

      可以看到stress进程的CPU使用率为100%。


场景二:I/O密集型进程

     运行stress命令,模拟I/O压力: 基础篇02:到底应该怎样理解“平均负载”_top命令_06

    在第二个终端运行uptime查看平均负载的变化情况:  基础篇02:到底应该怎样理解“平均负载”_性能分析工具_07

    然后在第三个终端运行mpstat查看CPU使用率的变化情况:  基础篇02:到底应该怎样理解“平均负载”_top命令_08

     可以看出,1分钟的平均负载慢慢增加到1.06,其中一个CPU的使用率达到23.87,而iowait高达67.53%。这说明,平均负载的升高是由于iowait的升高。

    用pidstat查询下哪个进程导致了iowait这么高: 基础篇02:到底应该怎样理解“平均负载”_性能分析工具_09

    可以发现,还是stress进程导致的。

场景三:大量进程的场景

    当系统中运行进程超出CPU运行能力时,就会出现等待CPU的进程。

    用stress模拟8个进程  基础篇02:到底应该怎样理解“平均负载”_top命令_10

    接着运行pidstat来看一下进程的情况:    基础篇02:到底应该怎样理解“平均负载”_top命令_11

    可以看出8个进程在争抢2个CPU,每个进程等待CPU的时间高达75%(%wait),从而导致CPU过载。


小结

    平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,不能直接发现瓶颈在哪里。所有理解平均负载时也要注意:

    (1)平均负载高有可能时CPU密集型进程导致的;

    (2)平均负载高不一定代表CPU使用率高,有可能时I/O更繁忙了;

    (3)当发现负载高的时候,可以使用mpstat、pidstat等工具,辅助分析负载的来源




举报

相关推荐

0 条评论