第二篇:《CPU 基础指标:负载、上下文切换与中断》

📅 2026/7/1 13:14:12
第二篇:《CPU 基础指标:负载、上下文切换与中断》
CPU 是 Linux 性能分析中最先被关注的资源但也是最容易被误解的资源。平均负载不等于 CPU 使用率上下文切换高不一定是坏事中断过多也不一定意味着故障。本文深入讲解这三个 CPU 核心指标的本质、正确的解读方法以及它们之间的联动关系帮你建立 CPU 性能分析的扎实基础。一、平均负载Load Average最被误解的指标1.1 平均负载的本质uptime 或 top 命令输出的三个数字——分别代表过去 1 分钟、5 分钟、15 分钟的系统平均负载。平均负载的定义是单位时间内系统处于可运行状态R和不可中断状态D的平均进程数。这个定义包含两个关键点可运行状态R 正在使用 CPU 或正在等待 CPU 调度的进程。不可中断状态D 正在等待 I/O 完成的进程如磁盘读写、网络等待。⚠️ 核心误区很多人把平均负载等同于 CPU 使用率。实际上平均负载 ≠ CPU 使用率。高负载可能是 CPU 繁忙也可能是大量进程在等待 I/O。1.2 如何正确解读平均负载第一步看趋势而非绝对值如果 1 分钟值 5 分钟值说明负载正在上升。如果 1 分钟值 5 分钟值说明负载正在下降。趋势比绝对值更重要——上升趋势意味着系统正在变差。第二步与 CPU 核数对比平均负载的理想上限是 CPU 核数。当负载持续超过核数时说明有进程在排队等待 CPU。举例一个 16 核的系统负载为 27.28 意味着平均每个 CPU 核心上有约 1.7 个进程在竞争——系统已严重过载。第三步区分 CPU 负载和 I/O 负载由于平均负载包含 D 状态不可中断睡眠的进程高负载可能来自1.3 平均负载的实战案例$uptime14:23:01 up10days,3:15,2users, load average:2.50,1.80,1.20解读系统有 4 个 CPU 核心。1 分钟负载 2.50 4说明 CPU 有余量但 1 分钟 5 分钟 15 分钟2.50 1.80 1.20说明负载在持续上升需要警惕。1.4 负载的常见误区二、上下文切换Context SwitchCPU 的“换台”成本2.1 什么是上下文切换上下文切换是 CPU 从一个进程或线程切换到另一个进程或线程时保存当前状态寄存器、程序计数器、栈指针、页表等并加载下一个任务状态的过程。它分为两种类型2.2 上下文切换为什么影响性能上下文切换的直接开销是微秒级的保存和恢复 CPU 状态但真正的性能杀手是间接开销CPU 缓存失效切换后新进程的指令和数据不在 L1/L2/L3 缓存中需要从内存重新加载。TLB 失效页表缓存被刷新地址转换变慢。流水线冲刷CPU 指令流水线需要重新填充。一个频繁上下文切换的系统即使 CPU 使用率不高应用性能也可能很差——因为大量时间花在了“换台”而不是“干活”上。2.3 如何监控上下文切换vmstat 1 查看系统级切换$vmstat1procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpdfreebuff cache si so bi boincs us syidwa st2001024001200045000000102050080002556820cs 列每秒上下文切换次数。in 列每秒中断次数。参考阈值正常情况下cs 应低于 50000 次/秒。持续过高说明调度压力大。pidstat -w 1 查看进程级切换$ pidstat-w103:45:01 PMUIDPID cswch/s nvcswch/s Command 03:45:02 PM0123485.002.00mysqld 03:45:02 PM05678120.0045.00javacswch/s自愿上下文切换。nvcswch/s非自愿上下文切换。高 nvcswch/s非自愿切换 是 CPU 饱和的典型信号——进程因为时间片耗尽被频繁抢占。2.4 上下文切换异常的排查思路三、中断Interrupts硬中断与软中断中断是 CPU 响应硬件或软件事件的机制分为两种3.1 硬中断Hard IRQ由硬件设备触发网卡收到数据包、磁盘完成 I/O、键盘输入等会立即打断当前进程的执行。查看硬中断cat /proc/interrupts每一行代表一个中断号每一列代表一个 CPU 核心上的中断计数。$cat/proc/interrupts CPU0 CPU1 CPU2 CPU30:12000IR-IO-APIC2-edge timer8:0000IR-IO-APIC8-edge rtc016: 12345678 12345678 12345678 12345678 IR-IO-APIC 16-fasteoi ehci_hcd:usb13.2 软中断SoftIRQ由内核在硬中断之后触发用于处理耗时较长的工作如网络协议栈处理、定时器任务。查看软中断cat /proc/softirqs$cat/proc/softirqs CPU0 CPU1 CPU2 CPU3 HI:0000TIMER:12345678123456781234567812345678NET_TX:123456123456123456123456NET_RX:98765432987654329876543298765432BLOCK:123456123456123456123456TASKLET:0000SCHED:1234567123456712345671234567NET_RX网络接收和 NET_TX网络发送是网络密集型系统中最常见的软中断。高 NET_RX 通常意味着网络流量大或网卡中断合并配置不当。3.3 硬中断与软中断的处理流程text硬件设备产生中断↓CPU 暂停当前进程执行硬中断处理程序快速、不可抢占↓硬中断处理完成标记软中断↓CPU 返回进程上下文稍后或通过 ksoftirqd 内核线程处理软中断↓软中断执行耗时操作网络协议栈、磁盘 I/O 完成等硬中断必须快速完成否则会阻塞其他中断软中断可以延迟处理但过多软中断会消耗 CPU。3.4 中断相关的性能问题四、三个指标的联动分析平均负载、上下文切换、中断不是孤立的指标它们之间存在紧密的联动关系text高负载load average↓ 可能原因CPU 密集型 → 进程竞争 CPU → 高非自愿上下文切换nvcswch→ CPU 饱和I/O 密集型 → 进程等待 I/O → 高自愿上下文切换cswch→ 高 wa%网络密集型 → 网卡中断频繁 → 高 in中断→ 高软中断NET_RX实战排查路径看到高负载 → 先看 vmstat 1 的 r运行队列和 b阻塞进程。r 高 → 用 mpstat -P ALL 1 看是否单核打满 → 用 pidstat 1 定位进程。b 高或 wa 高 → 用 iostat -xz 1 看磁盘 I/O。in中断高 → 用 cat /proc/interrupts 看哪个设备中断最多 → 检查网卡或磁盘。cs上下文切换高 → 用 pidstat -w 1 看是自愿还是非自愿切换。五、小结平均负载包含 R 状态CPU 运行/等待和 D 状态I/O 等待的进程数。不等于 CPU 使用率。上下文切换自愿切换I/O 等待和非自愿切换CPU 抢占。高 cs 高 nvcswch 是 CPU 饱和的信号。中断硬中断硬件触发和软中断内核处理。高中断通常意味着网络或磁盘压力大。三个指标联动分析才能准确定位问题根因孤立看任何一个指标都可能误判。