cpu负载问题

一、对于load average的理解

1.1 平均负载

[root@k8s-master1 ~]# w | head -1
 05:21:43 up  4:45,  2 users,  load average: 0.19, 0.12, 0.13
  • 第一位0.19:表示最近1分钟平均负载
  • 第二位0.12:表示最近5分钟平均负载
  • 第三位0.13:表示最近15分钟平均负载

1.2 关于平均负载的理解

打个比方:

  • CPU就是车道,进程就是汽车,负载就是车道上车的数量
  • 单核cpu相当于就单向单车道;多核cpu就相当于单向多车道;

1.2.1 单核情况

可以理解为,此时只有一条车道,这条车道上最多能同时跑10辆车,那么这个车道就有三种情况

  • 车道上的车数量小于10辆,此时,这条路的负载小于1
  • 车道上的车数量等于10辆,此时,这条路的负载等于1【1表示1个CPU核心用满了
  • 车道上的车数量等于10辆,而且还有排队车辆,此时,这条路的负载大于1

  • 如果负载为2,可以理解为总车辆数为20
  • 如果复杂为3,可以理解为总车辆数为30
  • ......

1.2.2 两核情况

可以理解为,此时只有两条车道,每条车道上最多能同时跑10辆车,因此同时最多可以跑20辆车,那么这个车道就有三种情况

  • 车道上的车数量小于20辆,此时,这条路的负载小于2
  • 车道上的车数量等于20辆,此时,这条路的负载等于2【2表示2个CPU核心用满了
  • 车道上的车数量等于20辆,而且还有排队车辆,此时,这条路的负载大于2

1.2.3 多核情况

可以理解为,此时只有多条车道,每条车道上最多能同时跑10辆车,因此同时最多可以跑10*n辆车,那么这个车道就有三种情况

  • 车道上的车数量小于10*n辆,此时,这条路的负载小于n
  • 车道上的车数量等于10*n辆,此时,这条路的负载等于n【n表示2个CPU核心用满了
  • 车道上的车数量等于10*n辆,而且还有排队车辆,此时,这条路的负载大于n

1.2.3 总结

  • 1核CPU,负载接近1,就应该引起注意
  • 2核CPU,负载接近2,就应该引起注意
  • n核CPU,负载接近n,就应该引起注意

二、处理CPU负载过高

2.1 CPU使用率和CPU负载

使用率和负载是两个不同的概念

  • 使用率是一个程序的进程在运行过程中,占用的CPU时间片的百分比
  • 负载指的是在一段时间内,正在使用CPU和等待使用CPU的进程数量情况,也就是队列长度

2.2 分析cpu负载的命令

  • top 命令:查看进程级别的cpu使用情况。
  • vmstat 命令:查看系统级别的cpu使用情况。
  • iostat