如何通过 top、vmstat、iostat 这三个核心系统命令快速排查 CPU、内存、I/O 的异常
一、top:实时监控 CPU、内存(进程级 + 系统级) 强调瞬时值
top 是最常用的实时系统监控工具,能直观看到 CPU、内存的整体使用情况,以及占用资源最多的进程(比如数据库进程 mysqld/postgres)。
1. 基本用法
直接输入 top 即可进入实时监控界面(按 q 退出),数据库场景建议关注整体统计行(前 5-6 行),而非单个进程。
2. 输出核心字段解读(重点看前几行系统统计)
top - 10:23:45 up 100 days, 2:30, 2 users, load average: 4.50, 3.20, 2.80(1 分钟、5 分钟、15 分钟系统负载(等待 CPU 调度的进程数))
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 75.0 us, 10.0 sy, 0.0 ni, 10.0 id, 5.0 wa, 0.0 hi, 0.0 si, 0.0 st

数据库场景关键操作
- 按
1可展开每个 CPU 核心的使用率(判断是否单核心满载,比如单条慢 SQL 占满 1 核)。 - 按
P按 CPU 使用率排序,快速找到占 CPU 最高的进程(比如 mysqld)。 - 按
M按内存使用率排序,找到占内存最高的进程。
二、vmstat:系统级资源统计(CPU、内存、I/O、进程)强调固定时间间隔的整体统计
vmstat 2 5 # 每2秒输出1次,共输出5次(排除首次瞬时值)

数据库场景关键结论
r>CPU核心数 + b>0:CPU 和 I/O 都有瓶颈;si/so>0:必须优先解决内存不足(加内存 / 优化数据库缓存);wa>20%:重点排查磁盘 I/O(比如数据库表没索引、磁盘性能差)。
三、iostat:磁盘 I/O 专项监控
iostat 是排查磁盘 I/O 瓶颈的核心命令,数据库服务器的 I/O 问题(比如慢查询、事务提交慢)大多能通过它定位。
iostat -x 2 5 # -x:显示扩展统计(最关键),2秒1次,共5次
Linux 3.10.0-1160.11.1.el7.x86_64 (db-server) 02/26/2026 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
75.00 0.00 10.00 5.00 0.00 10.00
Device: rrqm/s wrqm/s rMB/s wMB/s rawait wawait aqu-sz %util
sda 0.00 5.00 1.00 2.00 5.00 10.00 1.5 80.00

%util>80% + aqu-sz>2:磁盘 I/O 完全饱和(比如数据库频繁刷脏页、写 redo 日志);rawait>50ms:读 I/O 严重延迟(优先检查数据库索引、是否全表扫描);wawait>50ms:写 I/O 严重延迟(优先检查数据库日志盘、磁盘是否满、RAID 缓存)。
总结
-
CPU 异常判断:
- top/vmstat/iostat 的
us>80%:数据库应用层(SQL)消耗过多 CPU; - load average 持续 > CPU 核心数:CPU 资源不足;
sy>30%:内核态操作频繁(需排查系统调用 / 网络)。
- top/vmstat/iostat 的
-
内存异常判断:
- vmstat 的
si/so>0:物理内存耗尽,开始用交换分区(数据库性能暴跌); - top 的
avail Mem<总内存10%:可用内存不足(需优化数据库缓存 / 加内存)。
- vmstat 的
-
I/O 异常判断:
- iostat 的
%util>80%:磁盘 I/O 饱和; wa/%iowait>20%:CPU 等待 I/O(磁盘瓶颈);rawait/wawait>20ms:读写 I/O 延迟过高。
- iostat 的

浙公网安备 33010602011771号