Linux 性能:top、vmstat、iostat 命令
在 Linux 系统运维中,性能问题往往来得突然又隐蔽。当服务器响应变慢、业务出现卡顿,你需要一套趁手的工具来快速定位瓶颈。top、vmstat、iostat 是三个最基础也最实用的性能监控命令,几乎每个运维人员都会用到。它们分别侧重于查看进程动态、系统整体资源和磁盘 I/O 情况,配合使用能帮你快速锁定 CPU、内存、磁盘哪个环节出了问题。
1. top:实时掌握系统全局状态
top 是 Linux 下最常用的实时性能监控工具,它以动态更新的方式展示系统当前的进程列表、资源占用情况,以及系统整体的负载信息。打开终端输入 top 并回车,你会看到一个不断刷新的仪表盘,顶部显示系统概况,下方按资源占用排列进程列表。
1.1 基础用法与交互操作
直接运行 top 会进入交互模式,界面每几秒自动刷新一次。按 M 可以按内存占用排序进程,按 P 按 CPU 占用排序,按 k 再输入进程 PID 可直接终止该进程。按 h 查看帮助,按 q 退出程序。
如果你想只看特定用户的进程,使用 -u 参数指定用户名:
top -u nginx
加上 -p 参数可以监控指定的进程 ID,便于跟踪某个服务的资源消耗:
top -p 1234,5678,9012
1.2 理解 top 的输出信息
首次使用 top 会被满屏的数据弄得眼花缭乱,其实这些信息有固定的含义。顶部的五行是系统整体状态:
top - 14:32:15 up 12 days, 3:45, 2 users, load average: 1.25, 0.98, 0.87
Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8.5 us, 2.1 sy, 0.0 ni, 87.4 id, 1.0 wa, 0.0 hi, 1.0 si, 0.0 st
KiB Mem : 8.0 total, 2.1 free, 5.2 used, 0.7 buff/cache
KiB Swap: 4.0 total, 3.8 free, 0.2 used, 1.1 avail Mem
第一行显示当前时间、系统运行时间、登录用户数,以及过去 1 分钟、5 分钟、15 分钟的平均负载。负载数值如果持续高于 CPU 核心数,说明系统过载。比如 4 核 CPU 的机器,负载长期超过 4 就需要关注。
第三行的 %Cpu 是重点,拆解来看:us 是用户空间进程占用的 CPU 比例,sy 是系统内核占用的比例,id 是空闲比例,wa 是等待 I/O 的时间。如果 wa 很高,说明磁盘或网络是瓶颈。如果 us 很高,热点在应用程序代码。
第四、五行展示内存和交换分区使用情况。used 是已用量,free 是完全空闲,buff/cache 是缓存和缓冲区。Linux 会把空闲内存用于缓存,回收很快,所以重点看 available(可用内存)而不是 free。
1.3 高阶参数与批量导出
需要把 top 的输出保存到文件进行分析时,加上 -b 进入批处理模式,-n 指定刷新次数:
top -b -n 5 > top_output.txt
配合 -d 设置刷新间隔(单位秒),-w 调整输出宽度(适合远程终端):
top -b -n 10 -d 2 -w
2. vmstat:虚拟内存与 CPU 核心指标
vmstat 的全称是 "virtual memory statistics",它比 top 更精简,专注于 CPU、内存、分页、磁盘 I/O、中断和上下文切换的核心指标。没有华丽的界面,全是实用的数字,适合写入脚本做自动化监控。
2.1 快速上手
直接运行 vmstat 会显示系统启动以来的平均数据,没有太大参考价值。加上一个数字参数指定刷新间隔(秒),才会展示实时动态:
vmstat 2
输出会每 2 秒刷新一次,按 Ctrl + C 停止。如果只想要一次输出后退出,加上第二个参数指定次数:
vmstat 2 5
这表示每 2 秒刷新一次,共输出 5 次。
2.2 输出字段详解
vmstat 的输出通常有十几列,理解每列含义是用的关键:
| 列名 | 含义 |
|---|---|
r |
可运行(就绪)状态的进程数,包括正在运行和等待 CPU 的 |
b |
不可中断休眠状态的进程数,通常在等待 I/O |
swpd |
使用的虚拟内存总量(swap) |
free |
空闲内存量 |
buff |
用作缓冲区的内存 |
cache |
用作缓存的内存 |
si |
从 swap 换入内存的速度(KB/s) |
so |
从内存换出到 swap 的速度(KB/s) |
us |
用户空间占用 CPU 的百分比 |
sy |
系统内核占用 CPU 的百分比 |
id |
CPU 空闲百分比 |
wa |
等待 I/O 的时间百分比 |
重点关注 r 列和 b 列。如果 r 长期大于 CPU 核心数,说明 CPU 是瓶颈,进程在排队等处理器的空闲。如果 b 很大,说明有进程在等待磁盘或网络 I/O,常见于数据库、大文件拷贝等场景。
si 和 so 列反映 swap 的使用情况。如果这两个值频繁出现数字,说明物理内存不够用了,系统在频繁地换页操作,性能会急剧下降。这种情况优先考虑加内存或者优化应用。
2.3 按类型统计
默认输出是按时间聚合的汇总,加上 -t 可以显示时间戳,便于和其他监控数据对齐:
vmstat -t 1
加上 -w 让输出更宽更易读,列之间用空格分隔,适合复制到表格处理:
vmstat -w 1
需要查看各个 CPU 核心的详细情况(多核服务器必备),加上 -p 参数并指定处理器编号:
vmstat -p 0 # 查看第一个 CPU
3. iostat:磁盘 I/O 的照妖镜
当系统出现卡顿,top 显示 CPU 空闲但业务很慢,vmstat 显示 wa 很高,这时问题很可能出在磁盘 I/O 上。iostat 是专门用于监控 CPU 使用率和磁盘 I/O 吞吐量的工具,来自 sysstat 包,大多数 Linux 发行版默认已安装。
3.1 基本使用
同样,iostat 直接运行只显示历史平均数据,加上间隔参数才有实时价值:
iostat 2
首次输出会包含 CPU 使用率和所有磁盘设备的 I/O 统计,后续输出只显示设备信息。如果想每次都看到完整的 CPU 统计,加 -c 参数:
iostat -c 2
加上 -d 只显示设备统计,省略 CPU 部分:
iostat -d 2
3.3 解读 iostat 输出
iostat 的输出分为两部分:CPU 利用率和设备利用率。
CPU 部分和 vmstat 类似,关注 %util。这个指标表示设备忙于处理 I/O 请求的时间比例。如果 %util 接近 100%,说明磁盘已经满负荷运转,此时即使还有其他空闲算力,业务也只能等磁盘。如果 %util 很低但 %await 很高,说明设备的响应时间变长了,可能存在队列等待。
设备部分展示每个磁盘的吞吐和响应:
| 列名 | 含义 |
|---|---|
tps |
每秒 I/O 传输次数(一次传输可能包含多个块) |
kB_read/s |
每秒读取的数据量(KB) |
kB_wrtn/s |
每秒写入的数据量(KB) |
kB_read |
总读取量 |
kB_wrtn |
总写入量 |
avgqu-sz |
平均请求队列长度 |
await |
平均每次 I/O 的等待时间(毫秒),包括排队和实际处理 |
svctm |
平均每次 I/O 的服务时间(毫秒) |
%util |
设备忙于处理请求的时间比例 |
await 是最直观的性能指标。普通机械硬盘的正常响应在 5-15ms,SSD 可以到 1ms 以下。如果 await 超过 50ms,说明磁盘已经成为瓶颈。avgqu-sz 长期大于 1,说明请求在排队,系统在等待。
3.4 扩展参数与报告生成
需要查看指定磁盘设备,加上设备名作为参数:
iostat -d sda sdb 2
-x 参数显示扩展统计,包含更多细节如磁盘利用率、服务时间等,是深入分析时的必用选项:
iostat -x 2
-h 参数让输出更 human-readable,把 KB、MB 自动换算成合适的单位:
iostat -h 2
需要生成机器可读或便于导入数据库的报告,使用 -o JSON 或 -o JSON -h:
iostat -o JSON -h 2
4. 实战场景:组合使用定位性能瓶颈
单个命令各有侧重,实际排查时需要组合使用。假设网站响应变慢,业务团队反馈卡顿,按照以下步骤快速定位:
步骤一:用 top 看全局。 运行 top,按 P 按 CPU 排序,看哪个进程占用最高。如果某个进程的 %CPU 持续 90% 以上,代码可能有死循环或计算密集逻辑。如果 CPU 占用不高但 wa 很高,说明在等 I/O。
步骤二:用 vmstat 确认瓶颈类型。 运行 vmstat 1,观察 r(等待运行的进程数)和 b(等待 I/O 的进程数)。如果 r 很大且 us 很高,CPU 不够用或代码需要优化。如果 b 很大且 wa 很高,进一步查磁盘。如果 si 或 so 有持续数值,说明内存不够在 swap。
步骤三:用 iostat 定位具体磁盘。 运行 iostat -x 1,找出 %util 接近 100% 或 await 很高的设备。看看是哪个磁盘或分区,可能是数据库的数据盘、日志盘,或者同时有大量写入的任务。
步骤四:针对性处理。 确认瓶颈后对症下药。CPU 瓶颈考虑加核心或优化代码,内存瓶颈考虑加内存或调整应用缓存配置,磁盘瓶颈考虑换 SSD、做读写分离、优化索引,或者用 ionice 调整 I/O 调度优先级。
5. 小结
top、vmstat、iostat 三个命令覆盖了 CPU、内存、磁盘三大核心资源,配合使用能应对大多数性能排查场景。top 直观展示进程级别的资源占用,适合快速找到异常进程。vmstat 简洁地呈现系统整体的 CPU、内存、分页和调度信息,适合判断瓶颈类型。iostat 专注磁盘 I/O,能精确到每个设备和每项指标。熟练掌握这些工具,你就能在性能问题出现时快速定位根因,而不是凭感觉瞎猜。

暂无评论,快来抢沙发吧!