名词

进程可运行状态

正在使用或者是正在等待 CPU 的进程

不可中断状态的进程

处于内核态关键流程中的进程,并且流程是不可打断的。如:等待硬件设备的 I/O 响应

平均负载

系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数(单位时间内活跃进程数)

举例:平均负载显示为 2

  • 2 个 CPU ,表示所有 CPU 都刚好被完全占用
  • 4 个 CPU,表示有 CPU 50% 空闲

注意

  • 这里指的 CPU 个数为逻辑个数
  • 平均负载和 CPU 使用率并不一定情况一致,因为当出现 I/O 密集型进程,平均负载会高,但是 CPU 使用率就不一定了
  • 一般情况下,当平均负载高于 CPU 数量的 70% 就应该注意了

命令

uptime

  1. ~ uptime
  2. 15:14 up 6:09, 2 users, load averages: 2.41 3.23 3.38
  3. # 最后三个数为 1分钟 5分钟 15分钟的平均负载

查看cpu逻辑个数

  1. $ grep 'model name' /proc/cpuinfo | wc -l
  2. 2

监控CPU

  1. [root@Linkin ~]# mpstat -P ALL 5
  2. Linux 3.10.0-1062.9.1.el7.x86_64 (Linkin) 05/25/2020 _x86_64_ (2 CPU)
  3. 04:42:38 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
  4. 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
  5. 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
  6. 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
  7. [root@Linkin ~]# pidstat -u 5
  8. Linux 3.10.0-1062.9.1.el7.x86_64 (Linkin) 05/25/2020 _x86_64_ (2 CPU)
  9. 04:47:00 PM UID PID %usr %system %guest %CPU CPU Command
  10. 04:47:05 PM 0 394 0.00 0.20 0.00 0.20 1 kworker/1:1H
  11. 04:47:05 PM 0 395 0.00 0.20 0.00 0.20 1 jbd2/vda1-8

总结

  • 平均负载可以快速查看服务器状况,说白了可以知道现在服务器卡不卡。
  • 平均负载高,既可能是由于 CPU 繁忙或者 I/O 繁忙导致。
  • 可以进一步使用 mpstat 或 pidstat 命令继续定位分析。

金句

  • 不可中断状态实际上是系统对进程和硬件设备的一种保护机制

面试问题

  1. 什么是平均负载?如何进行查看?
  2. 如何定位平均负载高的原因?
  3. 你知道什么是硬中断、软中断吗?