名词
进程可运行状态
不可中断状态的进程
处于内核态关键流程中的进程,并且流程是不可打断的。如:等待硬件设备的 I/O 响应
平均负载
系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数(单位时间内活跃进程数)
举例:平均负载显示为 2
- 2 个 CPU ,表示所有 CPU 都刚好被完全占用
- 4 个 CPU,表示有 CPU 50% 空闲
注意
- 这里指的 CPU 个数为逻辑个数
- 平均负载和 CPU 使用率并不一定情况一致,因为当出现 I/O 密集型进程,平均负载会高,但是 CPU 使用率就不一定了
- 一般情况下,当平均负载高于 CPU 数量的 70% 就应该注意了
命令
uptime
➜ ~ uptime
15:14 up 6:09, 2 users, load averages: 2.41 3.23 3.38
# 最后三个数为 1分钟 5分钟 15分钟的平均负载
查看cpu逻辑个数
$ grep 'model name' /proc/cpuinfo | wc -l
2
监控CPU
[root@Linkin ~]# mpstat -P ALL 5
Linux 3.10.0-1062.9.1.el7.x86_64 (Linkin) 05/25/2020 _x86_64_ (2 CPU)
04:42:38 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:42:43 PM all 10.22 0.00 3.74 1.32 0.00 0.10 0.00 0.00 0.00 84.62
04:42:43 PM 0 11.87 0.00 4.02 0.80 0.00 0.20 0.00 0.00 0.00 83.10
04:42:43 PM 1 8.72 0.00 3.65 1.83 0.00 0.20 0.00 0.00 0.00 85.60
[root@Linkin ~]# pidstat -u 5
Linux 3.10.0-1062.9.1.el7.x86_64 (Linkin) 05/25/2020 _x86_64_ (2 CPU)
04:47:00 PM UID PID %usr %system %guest %CPU CPU Command
04:47:05 PM 0 394 0.00 0.20 0.00 0.20 1 kworker/1:1H
04:47:05 PM 0 395 0.00 0.20 0.00 0.20 1 jbd2/vda1-8
总结
- 平均负载可以快速查看服务器状况,说白了可以知道现在服务器卡不卡。
- 平均负载高,既可能是由于 CPU 繁忙或者 I/O 繁忙导致。
- 可以进一步使用 mpstat 或 pidstat 命令继续定位分析。
金句
- 不可中断状态实际上是系统对进程和硬件设备的一种保护机制
面试问题
- 什么是平均负载?如何进行查看?
- 如何定位平均负载高的原因?
- 你知道什么是硬中断、软中断吗?