平均负载
定义
uptime
[root@k8s-1 ~]# uptime
17:27:57 up 91 days, 4:35, 2 users, load average: 0.00, 0.01, 0.05
load average 有3个指标,分别是:1分钟平均负载、5分钟平均负载、15分钟平均负载 ,我们可以根据这三个指标,看到我们当前的系统负载整体是下降的,还是上升的。
平均负载是指 单位时间内,系统处于可运行状态或者不可中断状态的平均进程数。
可运行状态:正在使用CPU的进程和等待使用CPU的进程
不可运行状态:指进程正处于内核态关键流程中的进程,并且这些流程是不可被打断的,比如最长久的是等待硬件设备的I/O响应
平均负载多少时合理?
当前有多少的CPU
查看top或者/proc/cpuinfo
[root@k8s-1 ~]# cat /proc/cpuinfo |grep "model name"|wc -l
1
当平均负载比CPU个数还大的时候,系统已经出现了过载。当平均过载超过CPU的70%时,就应该有问题了
平均负载与CPU使用率
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,所以,他不仅包扩了正在使用CPU的进程,还包括等待CPU和等待 I/O的进程。
而CPU使用率,是单位时间内CPU繁忙情况的统计,和平均负载并不一定完全对应。比如:
CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的。
I/O 密集型进程, 等待I/O也会导致平均负载升高,但是CPU使用率不一定很高。
大量等待CPU的进程调用也会导致平均负载升高,此时的CPU使用率也会比较高。
平均负载案例分析
这里会用到2个工具,stress和sysstat
stress是一个Linux系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
sysstat是一个linux性能工具,用来监控和分析系统的性能,以下案例中会用到这个包的2个命令mpstat和pidstat。
mpstat 是一个常用的多核CPU性能分析工具用来实时查看每个CPU的性能指标,一级所有CPI的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的CPU、内存、I/O以及上下文切换等性能指标。
场景1:CPU密集型进程
[root@k8s-1 ~]# stress --cpu 1 --timeout 600
stress: info: [19419] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
场景二:I/O 密集型进程
[root@k8s-1 ~]# stress -i 1 --timeout 3600
stress: info: [21249] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
pidstat -u -r 5 1
Linux 3.10.0-514.26.2.el7.x86_64 (k8s-1) 07/30/2019 _x86_64_ (1 CPU)
06:16:27 PM UID PID %usr %system %guest %CPU CPU Command
06:16:32 PM 0 7024 0.20 0.20 0.00 0.40 0 kube-proxy
06:16:32 PM 0 10434 0.20 0.00 0.00 0.20 0 rsyslogd
06:16:32 PM 0 13106 0.20 0.00 0.00 0.20 0 AliYunDun
06:16:32 PM 0 18527 0.20 0.00 0.00 0.20 0 supervisord
06:16:32 PM 0 21121 99.00 0.00 0.00 99.00 0 stress
06:16:32 PM 0 21171 0.00 0.20 0.00 0.20 0 pidstat
场景三:大量进程的场景
[root@k8s-1 ~]# stress -c 24 --timeout 3600
stress: info: [21425] dispatching hogs: 24 cpu, 0 io, 0 vm, 0 hdd
[root@k8s-1 ~]# pidstat -u 5 1
Linux 3.10.0-514.26.2.el7.x86_64 (k8s-1) 07/30/2019 _x86_64_ (1 CPU)
06:19:46 PM UID PID %usr %system %guest %CPU CPU Command
06:19:51 PM 0 7024 0.00 0.20 0.00 0.20 0 kube-proxy
06:19:51 PM 0 10442 0.00 0.20 0.00 0.20 0 dockerd-current
06:19:51 PM 0 13106 0.20 0.00 0.00 0.20 0 AliYunDun
06:19:51 PM 0 21426 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21427 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21428 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21429 3.99 0.00 0.00 3.99 0 stress
06:19:51 PM 0 21430 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21431 3.99 0.00 0.00 3.99 0 stress
06:19:51 PM 0 21432 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21433 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21434 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21435 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21436 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21437 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21438 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21439 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM 0 21440 4.19 0.00 0.00 4.19 0 stress
06:19:51 PM .....
[root@k8s-1 ~]# mpstat -P ALL 5 1
Linux 3.10.0-514.26.2.el7.x86_64 (k8s-1) 07/30/2019 _x86_64_ (1 CPU)
06:22:03 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
06:22:08 PM all 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06:22:08 PM 0 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 0 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00