如何通过 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

image

 

 数据库场景关键操作

  • 1 可展开每个 CPU 核心的使用率(判断是否单核心满载,比如单条慢 SQL 占满 1 核)。
  • P 按 CPU 使用率排序,快速找到占 CPU 最高的进程(比如 mysqld)。
  • M 按内存使用率排序,找到占内存最高的进程。

二、vmstat:系统级资源统计(CPU、内存、I/O、进程)强调固定时间间隔的整体统计

vmstat 2 5   # 每2秒输出1次,共输出5次(排除首次瞬时值)

 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  r b swpd free buff cache si so bi bo in cs us sy id wa st
5 1 596 500 100 7400 0 5 100 200 500 1000 75 10 10 5 0
procs(进程): r  等待运行的进程数(等待 CPU 调度,持续 > CPU 核心数(比如 8 核 CPU,r>8):CPU 资源不足,进程排队) b 阻塞的进程数(等待 I/O 完成,如磁盘 / 网络 持续 > 0:有进程因 I/O 阻塞(数据库读写磁盘慢)) 

image

数据库场景关键结论

  • 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

image

 

  • %util>80% + aqu-sz>2:磁盘 I/O 完全饱和(比如数据库频繁刷脏页、写 redo 日志);
  • rawait>50ms:读 I/O 严重延迟(优先检查数据库索引、是否全表扫描);
  • wawait>50ms:写 I/O 严重延迟(优先检查数据库日志盘、磁盘是否满、RAID 缓存)。
 

总结

 
  1. CPU 异常判断:
     
    • top/vmstat/iostat 的us>80%:数据库应用层(SQL)消耗过多 CPU;
    • load average 持续 > CPU 核心数:CPU 资源不足;
    • sy>30%:内核态操作频繁(需排查系统调用 / 网络)。
     
  2. 内存异常判断:
     
    • vmstat 的si/so>0:物理内存耗尽,开始用交换分区(数据库性能暴跌);
    • top 的avail Mem<总内存10%:可用内存不足(需优化数据库缓存 / 加内存)。
     
  3. I/O 异常判断:
     
    • iostat 的%util>80%:磁盘 I/O 饱和;
    • wa/%iowait>20%:CPU 等待 I/O(磁盘瓶颈);
    • rawait/wawait>20ms:读写 I/O 延迟过高。
     
 
这三个命令配合使用,能快速定位数据库服务器的性能瓶颈:先看 top/vmstat 确定是 CPU / 内存 / I/O 哪类问题,再用 iostat 聚焦 I/O 细节,最终针对性优化(比如加索引、扩容内存、更换高速磁盘)。
posted @ 2026-02-26 11:29  一只竹节虫  阅读(19)  评论(0)    收藏  举报