vmstat指令介绍
文章目录
- 1. 功能介绍
- 2. 语法介绍
- 3. 应用场景
- 4. 示例分析
1. 功能介绍
vmstat (virtual memory statistics) 指令可以用来分析进程、内存、交换页、IO块以及CPU的使用情况。
可以使用 man 手册 进行查看大致介绍信息:
-sh-4.4$ man vmstat
# 会显示如下:
NAME
vmstat - 报 告 虚 拟 内 存 的 统 计 信 息总 览
vmstat [-n] [延 时 [次 数 ]]
vmstat [-V]描 述
vmstat 对 系 统 的 进 程 情 况 、 内 存 使 用 情 况 、 交 换 页 和 I/O 块 使 用 情 况 、 中 断 以 及 CPU 使 用 情 况 进 行 统 计 并 报 告 相 应 的 信 息 。 第 一 个 显 示 内 容 指 出 了 计 算 机 自 上 次 重 启 至 今 的 平 均 使 用 情 况 。 后 面 的 每 一 行 信 息 是 按 延 时 定 期 地 显 示 系 统 的 各 部 分 信 息 。 进 程 信 息 和 内 存 信 息 都 是 即 时 产 生 的 。 选 项
-n 开 关 令 第 一 次 的 信 息 只 显 示 一 次 而 不 是 周 期 地 产 生 。 延 时 是 以 秒 为 单 位 的 刷 新 时 间 间 隔 。 如 果 没 有 给 出 此 延 时 时 间 , 则 仅 显 示 系 统 启 动 至 今 的 平 均 值 。 次 数 指 的 是 更 新 的 次 数 。 如 果 没 有 指 定 此 数 而 又 定 义 了 延 时 时 间 , 则 次 数 的 默 认 值 是 无 穷 次 。-V 开 关 可 以 用 来 输 出 该 命 令 的 版 本 信 息 。输 出 信 息 简 介
Procs
r: 等 待 运 行 的 进 程 数
b: 处 在 非 中 断 睡 眠 状 态 的 进 程 数
w: 被 交 换 出 去 的 可 运 行 的 进 程 数 。 此 数 由
linux 计 算 得 出 , 但 linux 并 不 耗 尽 交 换 空 间Memory
swpd: 虚 拟 内 存 使 用 情 况 , 单 位 : KB
free: 空 闲 的 内 存 , 单 位 KB
buff: 被 用 来 做 为 缓 存 的 内 存 数 , 单 位 : KBSwap
si: 从 磁 盘 交 换 到 内 存 的 交 换 页 数 量 , 单 位 : KB/秒
so: 从 内 存 交 换 到 磁 盘 的 交 换 页 数 量 , 单 位 : KB/秒IO
bi: 发 送 到 块 设 备 的 块 数 , 单 位 : 块 /秒
bo: 从 块 设 备 接 收 到 的 块 数 , 单 位 : 块 /秒System
in: 每 秒 的 中 断 数 , 包 括 时 钟 中 断
cs: 每 秒 的 环 境 ( 上 下 文 ) 切 换 次 数CPU 按 CPU 的 总 使 用 百 分 比 来 显 示
us: CPU 使 用 时 间
sy: CPU 系 统 使 用 时 间
id: 闲 置 时 间
ps: 😀最近发现一个可以中文man手册网址,分享给大家: [中文man手册](Linux Manpages Online - man.cx manual pages)
- 资源监控维度
- 内存:物理内存(memory)、虚拟内存(Swap)的使用情况,包括空闲内存(free)、缓存(cache)、缓冲区(buff)等。
- 进程:运行队列中的进程数(r)、等待 I/O 的进程数(b)。
- CPU:用户态(us)、内核态(sy)、空闲(id)、I/O 等待(wa)的时间占比。
- 磁盘 I/O:每秒读写块数(bi/bo)及 Swap 交换速率(si/so)。
- 系统中断:每秒中断次数(in)和上下文切换次数(cs)。
2. 语法介绍
- 使用方法,参见man手册或者help信息:
root@root:/data$ ./vmstat --helpUsage:vmstat [options] [delay [count]]# delay:刷新周期
# count: 刷新次数
- 选项介绍
选项 | 功能描述 | 示例命令 |
---|---|---|
-a | 显示活跃(active )与非活跃(inact )内存状态 | vmstat -a |
-d | 输出磁盘 I/O 统计(读写速率、操作次数) | vmstat -d |
-s | 以表格形式汇总内存使用历史数据(如总内存、交换分区使用量) | vmstat -s |
-m | 显示 Slab 内存分配器的详细信息(内核对象缓存) | vmstat -m |
-p | 监控指定磁盘分区的 I/O 活动(需指定设备名如 /dev/sda1 ) | vmstat -p /dev/sda1 |
-S M | 指定内存单位(K =KB, M =MB),便于直观查看数据 | vmstat -S M |
-t | 在输出中添加时间戳,便于记录监控时间点 | vmstat -t |
3. 应用场景
-
CPU 瓶颈分析
-
高负载:若 r(运行队列进程数)持续大于 CPU 逻辑核心数,说明 CPU 资源不足。
-
用户态/内核态压力:us 或 sy 长期超过 50%,需优化程序或排查内核调用。
-
I/O 等待:wa 值高(如 >20%)表明磁盘或网络 I/O 成为瓶颈。
vmstat 2 # 每2秒刷新一次,观察CPU列变化
-
-
内存不足排查
-
Swap 频繁交换:si(换入)和 so(换出)持续**非零**,说明物理内存不足。
-
缓存/缓冲异常:cache 骤降可能触发磁盘频繁读,需检查内存泄漏。
vmstat -s # 查看内存历史使用汇总
-
-
磁盘 I/O 性能监控
-
高读写压力:bi(读块数)和 bo(写块数)持续高位,需优化存储或升级硬件。
-
磁盘分区瓶颈:结合 -d 或 -p 定位具体磁盘的负载。
vmstat -d 2 5 # 监控磁盘,每2秒输出,共5次
-
小技巧:
与 iostat 联动分析磁盘性能,或 top 定位高负载进程。
使用 watch vmstat 1 动态刷新数据
4. 示例分析
vmstat 1 3 # 每秒刷新,共3次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 123456 10240 256000 0 0 10 5 50 120 10 5 85 0 01 0 0 122000 10240 256100 0 0 0 0 200 300 15 10 75 0 03 1 0 120000 10240 256200 0 0 500 200 300 500 20 15 65 0 0
- CPU 分析:第三次采样时,us(用户态)达 20%,sy(内核态)15%,id(空闲)65%,表明 CPU 负载较高但未饱和。
- I/O 分析:第三次 bi(读块数)突增至 500,可能触发磁盘高负载,需结合 wa 确认是否存在等待。
- 进程队列:r 值偶尔超过 CPU 核心数,需长期监控判断是否需扩容