Linux性能监控教程_topvmstatiostat性能指标解析

21次阅读

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

Linux性能监控教程_topvmstatiostat性能指标解析

linux性能监控中,topvmstatfreeiostat 是最常用且信息密度高的命令,它们各自聚焦不同维度: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):关注 freeavailable 字段。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设计不合理。不复杂但容易忽略。

text=ZqhQzanResources