在 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命令中的used、buff/cache、available。
关键不是“free”有多小,而是 available(可立即分配给新进程的内存量)是否充足。
- 交换分区使用(swap):
si(swap in)和so(swap out)次数。持续、高频的 swap 意味着物理内存不够,系统在痛苦地换入换出,性能骤降。 - 脏页与缓存:内核会在后台将脏页(已修改但未写回磁盘的数据)刷新到存储。如果脏页比例过高,可能引发写阻塞。
工具
free -h:快速查看内存及 swap 概况。vmstat 1:关注si/so列,以及cache、buff的变化趋势。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/s、wkB/s——每秒读写数据量;r/s、w/s——每秒操作次数(IOPS)。
对比设备的标称 IOPS 和吞吐量,看是否达到了硬件瓶颈。
- 具体进程的 I/O:谁在疯狂读写?
工具
iostat -xz 1:综合展示每块设备的利用率、等待时间、吞吐量和 IOPS。iotop:类似top,按进程显示实时 I/O 使用量(需要 root)。pidstat -d 1:报告每个进程的 I/O 统计(读写千字节/秒)。lsblk、blktrace+btreplay/btt:更底层的块I/O跟踪,适用于深入分析。
4. 网络:流量、错误与连接状态
核心指标
- 吞吐量与数据包:
rxkB/s(接收字节)、txkB/s(发送字节),以及rxpck/s、txpck/s。 - 错误与丢包:
rxerr/s、txerr/s、rxdrop/s、txdrop/s。任何持续的错误计数都值得深挖。 - TCP 连接状态:
LISTEN、ESTABLISHED、TIME_WAIT、CLOSE_WAIT等积压情况。大量TIME_WAIT或CLOSE_WAIT常常是应用或配置问题。 - 重传与拥塞:
retrans/s用于衡量 TCP 重传率,高重传率表明网络质量差或带宽拥塞。
工具
sar -n DEV 1:按网卡展示流量和错误,同时还能看sar -n TCP,ETCP 1查看 TCP 连接统计和错误状态。netstat -i/ss -s:查看网络接口和 socket 统计摘要。iftop/nethogs:iftop按主机对显示实时带宽;nethogs按进程显示带宽使用。tcpdump/wireshark:抓包分析细节,当计数器确认有错误时下钻使用。
通用检查思维
面对性能问题,建议遵循“先概览,后下钻”的顺序:
- 用
top或htop快速看一眼综合负载:CPU、内存、负载平均。 - 用
vmstat 1观察系统级动向:进程就绪队列(r)、I/O 等待进程数(b)、交换活动(si/so)和上下文切换。 - 根据初步线索聚焦:
- CPU 高 →
mpstat -P ALL、perf top或pidstat; - 内存紧张 →
free -h、smem,关注 swap 和可用内存; - I/O 繁忙 →
iostat -xz 1、iotop; - 网络异常 →
sar -n DEV 1、nethogs。
- 全部四个维度的历史数据可以用
sar命令集中采集(需启用sysstat服务),便于对比问题出现前后的变化。
性能观测不是一次性的检查清单,而是一种持续感知系统状态的能力。把这四个维度的关键指标内化成“系统脉搏”,你就能在大部分故障早期便快速定位方向,为后续的深入调优或故障修复赢得宝贵时间。
后续小节将分别深入介绍 CPU 火焰图生成、内存泄漏排查、I/O 栈分析与网络瓶颈定位的技术。