人人都会AI编程

20.1 性能观测全景:CPU、内存、磁盘 IO、网络四大维度

更新时间:2026-07-12

在 Linux 系统中,性能问题很少是孤立出现的——CPU 使用率高可能只是表象,根因可能在磁盘 I/O 或锁竞争。因此,高效排障的第一步是建立一个 全局观测框架,从 CPU、内存、磁盘 I/O 和网络四个最核心的维度同时入手,快速圈定问题范围。本节为你提供每个维度最关键的指标、最实用的命令行工具,以及一套通用的检查思路。

1. CPU:谁在消耗运算资源?

核心指标

  • 总体使用率us(用户态)、sy(内核态)、id(空闲)、wa(等待 I/O)、hi(硬中断)、si(软中断)、st(虚拟机被宿主机偷走的时间)。

重点关注 us+sy 是否持续接近 100%,或 wa 是否异常偏高(通常>10%就意味着 I/O 成为瓶颈)。

  • 负载平均值(Load Average):表示单位时间内等待 CPU 资源(运行队列+不可中断睡眠)的平均进程数。

简单判断:负载持续大于 CPU 核数,说明存在任务堆积。

  • 上下文切换与中断次数:高频上下文切换可能暗示进程/线程竞争过度;高频软中断通常是网络包处理的标志。

工具

  • top / htop:实时查看各进程的 CPU 占用、负载和概览。
  • mpstat -P ALL 1:按每个 CPU 核心输出细粒度统计(哪些核心忙碌,wa 等)。
  • perf top / perf record:从函数级看 CPU 时间花在了哪里(剖析热点函数)。
  • pidstat -u 1:按进程输出 CPU 使用率变化,定位“捣乱进程”。

2. 内存:够用和用完之间的灰色地带

核心指标

  • 物理内存使用free 命令中的 usedbuff/cacheavailable

关键不是“free”有多小,而是 available(可立即分配给新进程的内存量)是否充足。

  • 交换分区使用(swap)si(swap in)和 so(swap out)次数。持续、高频的 swap 意味着物理内存不够,系统在痛苦地换入换出,性能骤降。
  • 脏页与缓存:内核会在后台将脏页(已修改但未写回磁盘的数据)刷新到存储。如果脏页比例过高,可能引发写阻塞。

工具

  • free -h:快速查看内存及 swap 概况。
  • vmstat 1:关注 si/so 列,以及 cachebuff 的变化趋势。
  • sar -r 1:报告当前内存使用细节(kbmemfree, kbbuffers, kbcached 等)。
  • top / htop:按内存使用排序(Shift+M),可瞬间定位内存消耗大户。
  • smem:更精确地分析进程的实际物理内存占用(PSS),区分共享库所占内存。

3. 磁盘 I/O:存储性能的晴雨表

核心指标

  • 利用率%util):磁盘处于忙碌状态的百分比。接近 100% 时,磁盘已饱和。
  • 等待队列与服务时间await(平均 I/O 请求等待时间,含在队列中的时间和实际服务时间),svctm(已废弃,但某些工具还会计算)。

如果 await 远高于预期(例如普通 SSD 应在毫秒级),说明 I/O 出现积压。

  • 吞吐量rkB/swkB/s——每秒读写数据量;r/sw/s——每秒操作次数(IOPS)。

对比设备的标称 IOPS 和吞吐量,看是否达到了硬件瓶颈。

  • 具体进程的 I/O:谁在疯狂读写?

工具

  • iostat -xz 1:综合展示每块设备的利用率、等待时间、吞吐量和 IOPS。
  • iotop:类似 top,按进程显示实时 I/O 使用量(需要 root)。
  • pidstat -d 1:报告每个进程的 I/O 统计(读写千字节/秒)。
  • lsblkblktrace + btreplay / btt:更底层的块I/O跟踪,适用于深入分析。

4. 网络:流量、错误与连接状态

核心指标

  • 吞吐量与数据包rxkB/s(接收字节)、txkB/s(发送字节),以及 rxpck/stxpck/s
  • 错误与丢包rxerr/stxerr/srxdrop/stxdrop/s。任何持续的错误计数都值得深挖。
  • TCP 连接状态LISTENESTABLISHEDTIME_WAITCLOSE_WAIT 等积压情况。大量 TIME_WAITCLOSE_WAIT 常常是应用或配置问题。
  • 重传与拥塞retrans/s 用于衡量 TCP 重传率,高重传率表明网络质量差或带宽拥塞。

工具

  • sar -n DEV 1:按网卡展示流量和错误,同时还能看 sar -n TCP,ETCP 1 查看 TCP 连接统计和错误状态。
  • netstat -i / ss -s:查看网络接口和 socket 统计摘要。
  • iftop / nethogsiftop 按主机对显示实时带宽;nethogs 按进程显示带宽使用。
  • tcpdump / wireshark:抓包分析细节,当计数器确认有错误时下钻使用。

通用检查思维

面对性能问题,建议遵循“先概览,后下钻”的顺序:

  1. tophtop 快速看一眼综合负载:CPU、内存、负载平均。
  2. vmstat 1 观察系统级动向:进程就绪队列(r)、I/O 等待进程数(b)、交换活动(si/so)和上下文切换。
  3. 根据初步线索聚焦:
  • CPU 高 → mpstat -P ALLperf toppidstat
  • 内存紧张 → free -hsmem,关注 swap 和可用内存;
  • I/O 繁忙 → iostat -xz 1iotop
  • 网络异常 → sar -n DEV 1nethogs
  1. 全部四个维度的历史数据可以用 sar 命令集中采集(需启用 sysstat 服务),便于对比问题出现前后的变化。

性能观测不是一次性的检查清单,而是一种持续感知系统状态的能力。把这四个维度的关键指标内化成“系统脉搏”,你就能在大部分故障早期便快速定位方向,为后续的深入调优或故障修复赢得宝贵时间。

后续小节将分别深入介绍 CPU 火焰图生成、内存泄漏排查、I/O 栈分析与网络瓶颈定位的技术。