为什么需要系统性能监控
服务器变慢或无响应时,第一个问题永远是:瓶颈在哪?是 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/sysstat 将 ENABLED=“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 日志系统完全指南。
综合排障思路
实际排障时,建议按以下顺序快速定位瓶颈:
- top/htop — 先看整体负载和资源占用 Top 进程,初步判断方向
- vmstat 1 10 — 采样 10 秒,看 r/b/wa 三列判断 CPU、I/O 还是内存瓶颈
- iostat -xdm 1 — 若怀疑磁盘,查看具体哪块盘繁忙、await 是否偏高
- sar -f — 若是历史问题,回溯对应时段数据,定位发生时刻
- pidstat -d 1 — 精确定位是哪个进程在产生压力
这套从宏观到微观的排查路径,能在几分钟内把“系统慢”这个模糊反馈收敛到一个可操作的结论——是某块磁盘老化、是某个进程内存泄漏、还是 Swap 不够用需要扩容。性能监控不是孤立地看某个数字,而是把多个工具的输出串联起来形成因果链,这才是高效运维的核心方法论。










暂无评论内容