1、什么是平均负载

可运行状态和不可中断状态的平均进程数,不仅包含了正在使用的CPU,还包含了等待的I/O进程

  比如平均负载为2时,意味着什么

    情况一:CPU只有2个时,CPU刚好全部被占用

    情况二:CPU有4个时,CPU有50%的空闲

    情况三:CPU只有1个时,有一半的资源竞争不到CPU

  平均负载为多少时才合理

      1、使用top命令查看CPU个数,或者从/proc/cpuinfo中读取

      2、使用uptime或者top命令来查看系统负载情况,下面用uptime来演示,最后三个数字依次代表过去1分钟,5分钟,15分钟的平均负载

      

CPU负载均衡的流程_top命令

 

      3、进行分析

        情况一:如果过去1分钟,5分钟,15分钟的平均负载相差不大,说明负载很文档

        情况二:如果过去1分钟远小于15分钟,说明过去1分钟负载在减小,过去15分钟内有很大的负载

        情况三:如果过去1分钟远大于15分钟,说明过去1分钟负载在增加,也可能持续增加,所以需要观察,如果近一分钟的负载接近或者大于CPU                                                 个数,意味着发生过载,需要进行分析和想办法优化

      4、假设我们在⼀个单+CPU+系统上看到平均负载为+1.73,0.60,7.98那么说明在过去+1+分钟内,系统有+73%+的超载,⽽在+15+分钟内,有                                +698%+的超载,从整体趋势来看,系统的负载在降低

      5、⼀般,当平均负载⾼于+CPU+数量+70%+的时候,你就应该分析排查负载⾼的问题了。一旦负载过高,响应就会变慢。70%也不是绝对的,最                              推荐的⽅法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势,当发现负载有明显升高趋势时,比如翻倍                                  了,再进行分析和检查

 

     

2、什么是可运行状态和不可中断状态

  正在使用CPU或者正在等待的进程称作为可运行状态,通过ps命令查看整体的进程情况,STAT 为R的进程即为可运行状态

  正处于内核态关键流程的进程称作为不可中断状态,常见的硬件设备的I/O响应、磁盘的读写数据时,这种是对进程和硬件设备的保护机制,STAT 为D的进程即为不可中断状态

 

3、CPU使用率

  CPU密集型进程:使⽤⼤量+CPU+会导致平均负载升⾼,此时这两者是⼀致的

        I/O密集型进程,等待+I/O+也会导致平均负载升⾼,但+CPU+使⽤率不一点很高

  ⼤量进程调度也会导致平均负载升⾼,此时的+CPU+使⽤率也会比较高

 

4、平均负载与CPU使用率案件分析

    命令:mpstat是⼀个常⽤的多核CPU性能分析⼯具,⽤来实时查看每个CPU的性能指标,以及所有CPU的平均指标

       pidstat是⼀个常⽤的进程性能分析⼯具,⽤来实时查看进程的CPU、内存、I/O+以及上下⽂切换等性能指标

    CPU密集型进程

        环境:CPU使用率100%

        

CPU负载均衡的流程_内核态_02

 

 

       正好有⼀个CPU的使⽤率为100%,但它的iowait只有+0。这说明,平均负载的升⾼正是由于+CPU+使⽤率为+100%

          

CPU负载均衡的流程_内核态_03

          从这⾥可以明显看到,stress进程的CPU使⽤率为100%

     I/O密集型进程

      

CPU负载均衡的流程_性能分析_04

 

 

         平均负载的升⾼是由于iowait的升⾼

        

CPU负载均衡的流程_CPU负载均衡的流程_05

 

 

 

          可以发现,还是stress进程导致的。使用pidstat -d 5 1查看延迟多少秒

 

          

CPU负载均衡的流程_内核态_06

 

       大量进程场景

 

        

CPU负载均衡的流程_内核态_07

 

         由于系统只有2个CPU,明显⽐8个进程要少得多,因⽽,系统的CPU处于严重过载状态

       

CPU负载均衡的流程_top命令_08

 

         可以看出,8个进程在争抢2个CPU,每个进程等待CPU的时间(也就是代码块中的%wait列)⾼达75%。这些超出CPU计算能⼒的进程,导致                                       CPU严重过载

   

5、防止cpu负载过高的方法

短期来看,可以通过kill和killall来杀死一些影响cpu负载的进程,达到降低cpu负载的目的。这些进程的状态是可以利用ps显示出来的,然后对相关的进程采取一定的措施就能在短时间内降低cpu的负载