top、vmstat、free、iostat 分别监控CPU、全系统状态、内存真实可用量、磁盘I/O,需重点关注平均负载与CPU核心数关系、available内存、wa和%util等关键指标,结合使用可精准定位性能瓶颈。

Linux性能监控中,top、vmstat、free、iostat 是最常用且信息密度高的命令,它们各自聚焦不同维度:CPU、内存、I/O 和整体系统负载。掌握它们输出中关键字段的含义和变化趋势,比记住所有参数更重要。
top:实时观察进程级资源消耗
运行 top 后重点关注以下几行:
- 第一行(uptime):显示系统运行时间、当前登录用户数、平均负载(1/5/15分钟)。平均负载 > CPU核心数,说明有任务在排队等待CPU,但不等于CPU 100%——需结合%CPU列判断。
- 第二行(Tasks):R(运行中)、S(睡眠)、Z(僵尸)进程数量。Z进程持续存在需排查父进程是否正常回收。
- 第三行(%Cpu(s)):us(用户态)、sy(内核态)、ni(优先级调整)、id(空闲)、wa(I/O等待)、hi(硬件中断)、si(软件中断)、st(被虚拟机偷走的时间)。wa 长期 > 20% 通常意味着磁盘响应慢;st 高说明宿主机资源紧张。
-
内存行(Mem / Swap):关注
free和available字段。available才是真正可立即分配给新进程的内存(含可回收的缓存),比free更具参考价值。 -
进程列表:按
P(CPU)、M(内存)、T(运行时间)排序;Shift + F可自定义显示列;k可杀进程,q退出。
vmstat:轻量级全系统状态快照
执行 vmstat 1 5 表示每秒采样一次,共5次。核心列解读如下:
- r:就绪队列中的进程数。持续 > CPU核心数,说明CPU竞争激烈。
- b:不可中断睡眠状态(如等待I/O)的进程数。b高+wa高,指向磁盘瓶颈。
- swpd:已使用的swap大小。非零不一定异常,但若持续增长且伴随si/so频繁,说明物理内存不足。
- si/so:swap in/out(单位KB/s)。si > 0 且持续发生,是内存压力明确信号。
- bi/bo:块设备I/O(读/写,单位blocks/s)。配合iostat看具体设备压力。
- in:每秒中断次数。异常升高可能由硬件或驱动问题引起。
- cs:每秒上下文切换次数。过高(如 > 10万)可能因进程/线程过多或频繁阻塞唤醒。
free:精准理解内存使用真相
用 free -h 查看易读结果,重点看 available 列而非 free:
- used:已分配给进程或内核的内存,含缓存(buffers/cache),不代表真实占用。
- buff/cache:内核缓冲区 + 页面缓存。这部分可被快速回收,不是“浪费”。Linux会主动利用空闲内存做缓存提升IO性能。
- available:估算的、无需交换即可供新进程使用的内存。这是判断是否缺内存的核心指标。
- 若
available接近0且swap used持续上升,才是真正的内存瓶颈。
iostat:定位磁盘I/O性能瓶颈
常用 iostat -x 1 3(-x 显示扩展统计,1秒间隔,3次):
- %util:设备忙于处理I/O请求的时间百分比。>70% 通常表示磁盘饱和,但SSD可承受更高利用率;需结合 await 和 svctm 看是否真有延迟。
- await:I/O请求平均等待+服务时间(毫秒)。>10ms(HDD)或 > 1ms(SSD)需警惕,持续升高说明响应变慢。
- svctm(已弃用):旧版中表示平均服务时间,现建议忽略,以 await 和 %util 为主。
- r/s, w/s:每秒读/写请求数。结合 rMB/s、wMB/s,可判断是小IO密集型(如数据库日志)还是大IO吞吐型(如视频转码)。
- avgqu-sz:平均队列长度。>1 且 await 高,说明I/O请求在排队,设备跟不上。
这些工具不是孤立使用的。例如:top看到wa高 → vmstat确认bi/bo和b值 → iostat查具体设备%util和await → free看内存是否触发swap → 综合判断是磁盘慢、内存不足,还是应用本身IO设计不合理。不复杂但容易忽略。











