Linux性能监控完全指南:从top/htop到vmstat/iostat/sar实战排障

为什么需要系统性能监控

服务器变慢或无响应时,第一个问题永远是:瓶颈在哪?是 CPU、内存、磁盘 I/O 还是网络?Linux 内置了一批成熟的监控工具,能够在几秒内帮你定位问题根源。掌握 top、vmstat、iostat 和 sar 的组合用法,是每位运维人员和系统爱好者的必备技能。如果你还不太熟悉进程层面的问题排查,可以先看看这篇 Linux进程管理完全指南,理解了进程状态后再来分析性能数据会更高效。

top 与 htop:实时资源总览

top 命令核心用法

top 是 Linux 上最经典的实时监控工具,默认每 3 秒刷新一次。打开终端输入 top,屏幕顶部会显示系统负载、CPU 使用率、内存和交换分区概况,下方是按 CPU 占用排序的进程列表。

几个常用交互键:

  • M — 按内存占用排序,快速定位内存大户
  • P — 按 CPU 占用排序(默认)
  • 1 — 展开显示每个 CPU 核心的使用率
  • c — 显示进程的完整命令行
  • k — 输入 PID 直接终止进程

重点关注第一行的 load average 三个数字,分别代表 1 分钟、5 分钟和 15 分钟的平均负载。如果三个值持续高于 CPU 核心数,说明系统已经过载。当内存不足触发 Swap 频繁读写时,系统性能会急剧下降,关于 Swap 的详细调优可以参考 Linux Swap 内存管理与调优完全指南

htop:更直观的替代方案

htop 是 top 的增强版,提供彩色界面、鼠标操作和进程树视图。安装方式:sudo apt install htop(Debian/Ubuntu)或 sudo yum install htop(CentOS/RHEL)。htop 的优势在于可以横向滚动查看完整命令行,还能用 F5 直接设置进程亲和性(CPU 绑定),在多核排查场景下非常方便。

vmstat:虚拟内存与系统状态快照

vmstat 报告虚拟内存、进程、CPU 和磁盘 I/O 的综合状态,适合做时间段采样分析。

基本用法与字段解读

vmstat 1 5 表示每 1 秒采样一次,共采 5 次。输出分为六栏,关键列含义如下:

  • r — 运行队列中的进程数,持续大于 CPU 核心数说明 CPU 不足
  • b — 等待 I/O 的阻塞进程数,持续偏高说明磁盘或网络有瓶颈
  • swpd — 已使用的 Swap 大小(KB),非零且 si/so 持续有值说明内存吃紧
  • si/so — 每秒 Swap 换入/换出量,这两个值长期大于 0 是内存不足的明确信号
  • bi/bo — 每秒从块设备读入/写出的数据量(KB),反映了磁盘 I/O 活跃度
  • us/sy/id/wa — 用户态/内核态/空闲/等待 I/O 的 CPU 占比,wa 持续高说明磁盘慢

实战排查场景

当用户反馈“系统卡顿”时,先跑一次 vmstat 1 10。如果 r 列持续大于核心数且 id 接近 0,是 CPU 瓶颈;如果 wa 持续超过 20% 且 b 列持续大于 0,是磁盘 I/O 瓶颈;如果 si/so 持续有值,是内存不足。三种情况对应完全不同的解决方向,盲目重启服务往往徒劳。

iostat:磁盘 I/O 深度分析

iostat 来自 sysstat 包,专门报告 CPU 使用率和各磁盘设备的 I/O 统计。安装:sudo apt install sysstat

关键指标

iostat -xdm 1 以扩展模式每秒刷新,重点关注以下指标:

  • %util — 磁盘繁忙率,接近 100% 说明该盘已满载
  • await — 平均 I/O 等待时间(毫秒),机械盘正常值通常低于 10ms,SSD 应低于 2ms,持续偏高说明磁盘响应慢
  • r/s 和 w/s — 每秒读/写请求数,判断是读密集还是写密集
  • rkB/s 和 wkB/s — 每秒读/写数据量
  • aqu-sz — 平均队列深度,持续大于 1 说明请求排队

当 iostat 显示某块盘 %util 持续 100% 且 await 偏高时,应排查是否有个别进程在疯狂读写,结合 进程管理中的 pidstat 工具可以精确定位到是哪个进程在产生 I/O 压力。

sar:历史性能数据回溯

前面三个工具都是实时快照,而 sar 的独特价值在于能回溯历史数据。启用方法:编辑 /etc/default/sysstatENABLED=“false” 改为 “true”,然后 sudo systemctl enable --now sysstat。之后系统会每 10 分钟自动采集一次性能快照存入 /var/log/sa/ 目录。

常用查询命令

  • sar -u — 查看今天 CPU 使用率历史
  • sar -r — 查看内存使用历史
  • sar -d — 查看磁盘 I/O 历史
  • sar -n DEV — 查看网络流量历史
  • sar -f /var/log/sa/sa25 — 查看 25 号那天的数据

sar 的数据采集依赖 cron 定时任务,如果历史数据缺失,先检查定时任务是否正常运行,关于定时任务的配置排查可以参考 Linux定时任务完全指南。有了历史数据,你就能回答“昨晚三点服务器到底发生了什么”这种事后排查难题。系统日志也是事后排查的重要数据源,与 sar 互补使用效果更佳,详见 Linux 日志系统完全指南

综合排障思路

实际排障时,建议按以下顺序快速定位瓶颈:

  1. top/htop — 先看整体负载和资源占用 Top 进程,初步判断方向
  2. vmstat 1 10 — 采样 10 秒,看 r/b/wa 三列判断 CPU、I/O 还是内存瓶颈
  3. iostat -xdm 1 — 若怀疑磁盘,查看具体哪块盘繁忙、await 是否偏高
  4. sar -f — 若是历史问题,回溯对应时段数据,定位发生时刻
  5. pidstat -d 1 — 精确定位是哪个进程在产生压力

这套从宏观到微观的排查路径,能在几分钟内把“系统慢”这个模糊反馈收敛到一个可操作的结论——是某块磁盘老化、是某个进程内存泄漏、还是 Swap 不够用需要扩容。性能监控不是孤立地看某个数字,而是把多个工具的输出串联起来形成因果链,这才是高效运维的核心方法论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容