问题:
- 什么是 CPU 平均负载?
- 哪些因素会对平均负载造成影响?
- 用什么工具查看平均负载?
和我一起学 Linux性能优化实战
平均负载
平均负载是对处于运行状态和不可中断状态进程的统计,和CPU使用率没有任何关系,通常使用 uptime
查看:
$ uptime
15:31 up 26 days, 17:46, 2 users, load averages: 1.95 1.80 1.71
上述例子中,1.95,1.80 和 1.71 分别表示过去1分钟,5分钟和15分钟的平均负载情况。
在系统有2个CPU情况下:
- 平均负载为1时,表示只有一半CPU得到了利用
- 平均负载为2时,表示所有CPU得到了利用
- 平均负载为4时,表示有一半的进程在竞争CPU
之所以显示1/5/15分钟的平均负载,是因为通过不同时间间隔的情况才能更全面地反映系统的趋势变化。当平均负载高于CPU数量的 70% 时,需要引起注意,开始排查导致负载升高的原因。
进程
进程的状态有x种:
- 运行状态:
- 不可中断状态:
影响平均负载的因素
通过平均负载的含义,可以得知平均负载包括使用CPU的进程和等待使用CPU的进程,因此:
- CPU 密集型进程,使用大量 CPU 会导致平均负载升;
- I/O 密集型进程,等待 I/O 也会导致平均负载升高;
- 大量等待 CPU 的进程调度也会导致平均负载升高;
工具
除了使用 uptime,可以安装 stress 和 sysstat 包来进行分析。stress 是一个 Linux 系统压力测试工具,而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。这里主要使用两个命令:
- mpstat: CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
- pidstat:进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
stress
stress可以模拟CPU使用率,IO读写等情形:
$ stress --cpu 1 --timeout 600 //模拟一个cpu100%
$ stress -i 1 --timeout 600 //模拟IO压力
$ stress -c 8 --timeout 600 //$ stress -c 8 --timeout 600
sysstat
注意需要使用 root 账号来运行以下命令。
mpstat
该命令可以把整体CPU和每个CPU的情况显示出来,%usr
等列的含义在下篇记录。
# -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
$ mpstat -P ALL 5
Linux 5.2.11-1.el7.elrepo.x86_64 (izbp1c8isqly84kayy7xd6z) 06/10/2020 _x86_64_ (2 CPU)
08:53:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:54:03 PM all 0.40 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 99.20
08:54:03 PM 0 0.40 0.00 0.60 0.00 0.00 0.00 0.00 0.00 0.00 99.00
08:54:03 PM 1 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.40
pidstat
# 间隔5秒后输出一组数据$ pidstat -u 5 1
Linux 5.2.11-1.el7.elrepo.x86_64 (izbp1c8isqly84kayy7xd6z) 08/08/2020 _x86_64_ (2 CPU)
08:56:39 PM UID PID %usr %system %guest %wait %CPU CPU Command
08:56:44 PM 0 445 0.20 0.00 0.00 0.00 0.20 0 dockerd-current
08:56:44 PM 0 451 0.00 0.20 0.00 0.00 0.20 0 docker-containe
08:56:44 PM 0 1052 0.20 0.00 0.00 0.00 0.20 0 rsyslogd
08:56:44 PM 27 1382 0.00 0.20 0.00 0.00 0.20 1 mysqld
08:56:44 PM 0 5570 0.40 0.80 0.00 0.00 1.20 1 AliYunDun
小结
平均负载高可能是CPU密集型任务或是等待密集IO任务引起的;CPU使用率高未必会导致平均负载高。
附思维导图:
Comments