系统负载与瓶颈分析指南(top/vmstat/iostat/sar)

使用 top/htop、vmstat、iostat、sar 综合分析 CPU、内存、I/O 瓶颈,详解各工具关键列与判读方法,覆盖负载基线建立与瓶颈定位,含 Ubuntu 22.04 实测回显。

Linux性能优化与调优系统监控2026/09/29

系统负载与瓶颈分析指南(top/vmstat/iostat/sar)

目标:使用 top/htop、vmstat、iostat、sar 综合分析 CPU、内存、I/O 瓶颈,建立系统负载基线并在异常时快速定位瓶颈。本文命令在 Ubuntu 22.04(内核 6.8.0)实测,回显均来自真实环境。

环境信息

  • 操作系统:Ubuntu 22.04.5 LTS;内核:6.8.0-138-generic
  • 工具:top、htop、vmstat、iostat、sar(sysstat)
  • 安装:apt-get install -y htop sysstat(sysstat 提供 iostat/sar)

前置条件

  • 普通用户可运行 top/vmstat;sar 需 sysstat 且开启数据采集服务。

1. top —— 实时进程与 CPU 概览

top -bn1        # 非交互单次输出(-b 批处理,-n1 取 1 帧)
top             # 交互式,按键:1 多核、P 按 CPU 排序、M 按内存排序

实测回显(节选):

top - 15:59:39 up  1:54,  0 users,  load average: 1.08, 0.96, 1.08
Tasks:  41 total,   1 running,  40 sleeping
%Cpu(s):  1.1 us,  0.0 sy, 97.8 id,  0.0 wa,  0.0 hi,  1.1 si
MiB Mem :  15946.4 total,    230.5 free,  13379.2 used,  2336.7 buff/cache
MiB Swap:   2048.0 total,    2039.4 used,     8.6 free
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  142 mysql 20 0 2374196 363120 12092 S 6.7 2.2 0:22.24 mysqld

判读:

  • load average:1/5/15 分钟平均可运行+不可中断进程数,与 nproc 对比判断负载。
  • %Cpu(s):us(user)/sy(system)/wa(iowait)/hi/hi/si(st);wa 高 = 磁盘 I/O 慢。
  • 按 P 看 CPU 占用进程,M 看内存占用进程。

2. htop —— 交互式增强版

htop

提供彩色状态、树形视图(F5)、进程过滤(F4)、CPU/内存条、直接发送信号,比 top 更直观。

3. vmstat —— 虚拟内存/CPU/IO 综合采样

vmstat   # 输出一次当前概要
vmstat 1 3   # 每秒采样 1 次,共 3 次
vmstat 1 5 -w   # 宽格式

实测回显:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 2093504 234412 39188 2353088 12   61   222   553  34  606 10  7 82  0  0

判读:

  • r(可运行队列):持续 > 核数说明 CPU 饱和。
  • si/so:swap 换入/换出,持续非 0 = 内存紧张。
  • bi/bo:块设备读/写,凸显 I/O 活动。
  • us/sy/id/wa:CPU 用户/系统/空闲/等待 I/O;wa 高 = I/O 瓶颈。

4. iostat —— 块设备 I/O 使用率

iostat           # 静态概要
iostat -x 1 5 joy      # 扩展、5 次、仅显示 joy
iostat -xm 1 3   # -x 扩展 + 兆字节

实测回显(节选,sda):

Device            r/s     rMB/s  rrqm/s %rrqm r_await   w/s   wMB/s wrqm/s %wrqm w_await aqu-sz %util
sda             85.65     3.19   131.29 60.52  0.85  0.85  38.11   0.00  0.00   0.09 ...

判读:

  • %util:设备繁忙度;持续 > 85% 视为 I/O 饱和。
  • r_await/w_await:读写平均延迟(毫秒),结合队列深度判断。
  • aqu-sz:平均队队长。

5. sar —— 周期性/历史负载归档(sysstat)

sar -u 1 3       # CPU
sar -r 1 3       # 内存
sar -b 1 3       # I/O
sar -n DEV 1 3   # 网络
sar -P ALL 1 3   # 每核 CPU
# 查看历史数据
sar -u -f /var/log/sysstat/sa<日>

实测回显:

15:59:39  CPU  %user  %nice  %system  %iowait  %steal  %idle
15:59:40  all  5.50   0.00   11.17    0.00     0.00    83.33

sar 配合 cron 服务可留存历史,用于负载基线趋势分析。打开 /etc/default/sysstat 设 ENABLED="true" 后 systemctl restart sysstat。

6. 综合判定矩阵

症状主要看瓶颈结论初步动作
CPU 高(us 高)top %CPU、vmstat rCPU 饱和扩容/优化代码
wa 高、%util 高iostat %util/awaitI/O 瓶颈换 SSD/调调度器
si/so 高、cache 压力vmstat si/so、free内存不足/swap加内存/调 swappiness
网络吞吐低iperf3、sar -n DEV网络/网卡调参数/扩充带宽

7. 常见问题

Q:load average 高是否一定 CPU 卡? A:不一定。负载含不可中断 D 状态(I/O 等待),I/O 挂起也会推高 load,需结合 wa、iostat %util 综合判读。

Q:vmstat 的 buff 与 cache 有何区别? A:buff 缓存裸块设备数据,cache 缓存文件页;cache 可被回收,出现 cache 大不代表内存泄漏。

Q:sar 无历史数据? A:确认 sysstat 服务已启用(systemctl enable --now sysstat)且 /etc/default/sysstat 为 enabled。

卸载方式

监控工具非常驻服务;卸载 sysstat/htop:apt purge htop sysstat。

参考链接

  • man top、man vmstat、man iostat、man sar
  • sysstat 文档:/usr/share/doc/sysstat/