系统负载与瓶颈分析指南(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 r | CPU 饱和 | 扩容/优化代码 |
| wa 高、%util 高 | iostat %util/await | I/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/
章节目录