Linux 系统监控与性能分析入门:top、htop、vmstat 与 iostat 实战
在云服务器上跑业务,最怕的不是报错,而是“变慢了,却不知道慢在哪里”。用户说页面打开要等几秒,日志里又没有明显异常,这时最可靠的办法,是回到系统层面,用最基础的监控命令把 CPU、内存、磁盘和网络逐一排查一遍。本文以一台常见的 Linux 云服务器为例,介绍 top、htop、vmstat 与 iostat 的入门实战用法。
一、先建立判断顺序:不要一上来就重启
遇到变慢,先问三个问题:是 CPU 不够,还是内存不够,还是磁盘或网络在等?很多新手一看到 load 高就认为是 CPU 问题,其实 load 高也可能是大量进程在等磁盘。正确顺序是:先用 uptime 看负载,再用 top 看是谁在占用资源,最后用 vmstat 和 iostat 区分是计算瓶颈还是 IO 瓶颈。
uptime
top
uptime 输出的三个数字,分别是过去 1 分钟、5 分钟、15 分钟的平均负载。单核机器负载长期大于 1,多核机器负载长期大于核数,才值得紧张;如果只是短暂冲高,往往是定时任务或备份在跑。
二、top:先找到“吃资源”的进程
top 是最常用的实时监控工具。打开后默认按 CPU 占用排序,重点看三行:第一行的 load average,第二行的任务状态,第三行的 %Cpu(s),以及下面的进程列表。
us高:用户进程确实在大量计算,例如业务高峰或某个循环写错了;sy高:系统调用频繁,可能是频繁创建进程、大量网络包或文件操作;wa高:CPU 在等磁盘 IO,这时加 CPU 没用,要去看磁盘;id高:CPU 空闲,变慢的原因不在 CPU。
在 top 里按 M 可以按内存排序,按 P 回到按 CPU 排序,按 1 可以展开每个 CPU 核的使用情况。如果某个进程的 CPU 长期占满一个核,先看它是不是可以优化的业务代码,而不是急着升级配置。
三、htop:更直观的 top
htop 可以理解为彩色、交互更好的 top。没有安装时可以用系统的包管理器安装,例如 sudo apt install htop 或 sudo yum install htop。它用不同颜色区分 CPU、内存和交换分区,支持用方向键选择进程,用 F9 结束进程,用鼠标点选排序列。
对新手来说,htop 最大的好处是直观:顶部的彩色 CPU 条一眼就能看出是单核跑满还是多核均衡,内存条能看出是否快用完、是否在用交换分区。需要注意的是,htop 本身也会占用少量资源,排查时不要只盯着它自己的占用。
四、vmstat:看内存、交换与上下文切换
top 看的是瞬间,vmstat 更适合看趋势。常用的是:
vmstat 1 5
意思是每 1 秒采样一次,共 5 次。重点看 si 与 so:它们是每秒换入、换出交换分区的量。如果这两个值持续大于 0,说明内存已经不够,系统在用磁盘当内存,性能会明显下降,这时要先释放内存或扩容,而不是调业务参数。
还要看 r 列:等待运行的进程数。如果 r 长期大于 CPU 核数,说明 CPU 排队严重;b 列长期大于 0,则说明有进程在等 IO。再看 cs(上下文切换)和 in(中断):数值突然暴涨,往往对应大量短连接、频繁创建线程或硬件中断异常。
五、iostat:确认是不是磁盘在拖后腿
当 wa 高或 vmstat 的 b 列偏高时,就轮到 iostat:
iostat -x 1 3
重点看 %util 与 await。%util 接近 100%,说明磁盘已经接近饱和;await 是每次 IO 的平均等待时间,普通云盘超过几十毫秒就要警惕,持续上百毫秒通常意味着业务已经被磁盘拖慢。还要区分读和写:r/s 与 w/s 分别是每秒读、写次数,如果写远大于读,要先查日志写入、备份或数据库刷盘。
一个常见误区是把磁盘空间满和磁盘 IO 慢混为一谈:空间满是 df -h 的事,IO 慢是 iostat 的事,两者要分开查。
六、一个完整的排查流程
假设一台 ECS 上的网站突然变慢,可以按下面顺序走一遍,全程不到五分钟:
uptime与top:确认负载和最耗资源的进程,记下进程名与 PID;free -h:确认内存与交换分区,排除内存不足;vmstat 1 5:确认是 CPU 排队还是 IO 等待;iostat -x 1 3:确认磁盘利用率与等待时间;- 再看业务日志与网络:用
ss -s或ping排除网络问题。
如果最后发现是某个定时备份在业务高峰跑,调整备份时间往往比升级配置更有效;如果发现是日志写得太频繁,改成按级别写日志、定期轮转,效果也很明显。
七、给新手的三点建议
第一,先建立基线:业务正常时记一次 top、vmstat、iostat 的数值,异常时才有对比。第二,不要只看一次采样:至少连续看 5 次,排除瞬间抖动。第三,云上要结合云监控:系统命令看到的是机器内部,云监控能看到带宽、磁盘、弹性公网 IP 等更完整的曲线,两者结合才不容易误判。
系统监控并不难,难的是养成“先定位、再动手”的习惯。把 top、htop、vmstat、iostat 这四个工具练熟,下次服务器变慢时,你至少能在五分钟内说出瓶颈在 CPU、内存还是磁盘,而不是凭感觉重启或升级。
- 点赞
- 收藏
- 关注作者
评论(0)