Linux vmstat 指标与 I/O 等待的判断
Linux vmstat 判断 I/O 等待时,应把 wa、b 与 bi/bo 放在同一个采样窗口里观察:wa 属于 CPU 时间比例,b 是等待 I/O 的阻塞任务数,bi/bo 描述块设备吞吐。它们可以提供排查方向,却不能单独证明某块磁盘已经满载。
wa 高是继续调查 I/O 等待的线索,不是磁盘利用率;wa 低也不能排除某个请求正在等待存储。先统一统计周期,再补设备延迟和业务时延,结论才有依据。
本文以 procps-ng 提供的 vmstat 为范围,使用一个原创排查场景:接口变慢,应用 CPU 使用不高,需要判断是否值得沿存储方向继续调查。下列命令用于读者采样,没有在本文生成环境运行,也不提供虚构的终端输出。
vmstat 手册地址:https://man7.org/linux/man-pages/man8/vmstat.8.html
先限定 vmstat 能回答的问题
vmstat 适合做主机概览:看看可运行任务、阻塞任务、内存和交换活动,以及 CPU 时间分布。它能帮助区分“主要在运算”“存在等待线索”“同时有换页活动”等方向,但默认概览没有告诉你哪个设备、哪个进程、哪个文件导致了等待。
因此,面对接口变慢,可以把问题缩成两个层次:主机同一时间是否出现等待迹象,业务依赖的设备是否出现延迟或排队。第一层由 vmstat 提供线索,第二层需要设备和业务侧记录,不能直接从主机总吞吐跳到更换磁盘的决定。

用有限采样避开首行误读
# 记录本机实现与可用选项,避免套用其他版本表头。 vmstat --version vmstat --help # 每秒更新,使用有限次数,保留表头并附时间戳。 vmstat -w -t 1 11
默认首行中的累计速率和 CPU 时间比例反映开机以来的统计,而后续行反映采样间隔。进程和内存部分即使在首行也是瞬时信息。因此不能把首行整行都当成过去一秒,也不能把其中每个字段都称为开机均值。
读取上面的报告时,保留首行但将它与后续区间分开。若本机支持 -y,可以省略首个开机统计报告:
# 本机支持 -y 时,略过开机以来的首个报告。 vmstat -y -w -t 1 10
如果某选项不可用,就使用本机支持的基本命令,并手动区分首行,不必为了采样升级整套系统。出现字段挤在一起时,宽输出有助于读表;自动化解析则应依据实际表头,而不是写死“第几列就是 wa”。
把 wa、b 和 bi/bo 放在一起看
| 字段 | 统计含义 | 不能直接推出的结论 |
|---|---|---|
| wa | CPU 时间中归入 I/O 等待的比例 | 不是某块磁盘繁忙百分比 |
| b | 等待 I/O 完成的阻塞任务数 | 不是设备请求队列长度 |
| bi、bo | 块设备读入、写出的吞吐速率 | 不是 IOPS,也不是请求耗时 |
| r | 正在运行或等待运行的任务数 | 不等于 I/O 等待任务数 |
| si、so | 交换入、交换出活动 | 不能只凭 swpd 非零认定正在频繁换页 |
当前 procps-ng 手册将 bi/bo 定义为 KiB/s。-S 改变内存和交换部分的显示单位,不改变 bi/bo;在旧工具或其他实现上,应以对应手册为准。尤其不要把 bi=某个数值口头翻译成每秒相同数量的磁盘请求。
在原创场景中,如果接口时延升高期间,连续多个样本的 wa 和 b 都相对正常期抬升,可以提出“I/O 等待可能参与了变慢”的假设。如果同时有持续 si/so,则应把内存压力引起的交换活动也放入考虑。这是调查方向,不是已经证明的根因。
另一个可能情况是 bi/bo 很高,但 b 没有持续积累,业务时延也稳定。这可能只是吞吐型任务正常读写。反过来,吞吐不高而等待明显,也可能是小请求延迟、同步写或其他因素,不能因为 MB/s 没到设备标称带宽就否定存储问题。
用同一时间窗补齐设备证据
如果 Linux 主机已安装 sysstat,可以在同一观察窗口取得设备扩展统计。应在业务变慢仍发生时对齐时间,不能拿故障后的设备空闲状态去否定故障中的等待。下面命令可以在另一个采集会话中使用,本文没有实际启动它。
# 已安装 sysstat 时读取设备扩展指标,跳过首个累计报告。 iostat -x -y -t 1 10
设备侧重点看 await 及读写延迟、平均队列长度等是否偏离自身正常期,再与对应业务读写时延对齐。await 包含排队和服务时间,不能简单叫作磁盘硬件服务时间。对于并行设备、阵列和现代 SSD,%util 也不应直接当成所有场景下的性能上限判断。
如果主机使用逻辑卷、设备映射或云盘,要先把业务文件所在存储与设备统计对应起来。先确认观察对象,再讨论瓶颈;否则看到一块无关设备繁忙,也不能解释应用变慢。

处理版本、虚拟机和观察误区
内核文档明确指出 iowait 统计在多核归属等方面存在限制,部分情况下累计值还可能下降。因此 wa 应作为统计线索使用,不能理解成 CPU 真正停住等待某个请求的精确计时器。其他任务能继续使用 CPU 时,某个业务请求的存储等待也可能没有表现为很高的主机 wa。
虚拟机中的 st 是被宿主侧占用的时间线索,不能并入 wa 后统一称为磁盘等待。容器里看到的 /proc 与 CPU 统计范围也需要结合运行环境确认,不能默认 vmstat 每列都只代表当前容器的配额和负载。
实际记录可以保留采样起止时间、业务是否变慢、连续区间里的 wa/b 变化、是否有交换活动、相关设备延迟,以及仍未确认的部分。没有设备级证据时,就记录“存在等待线索,设备归因未确认”,无需强行给一个确定结论。
wa 超过固定百分比就算故障吗?
没有适用于所有负载的统一阈值。应看持续时间、正常期基线和业务影响,再结合设备延迟判断。
wa 为零就可以排除 I/O 问题吗?
不能。主机统计会聚合多个 CPU 的状态,也不能代替某个请求或进程的等待分析。
swpd 非零表示正在发生交换吗?
swpd 描述已使用的交换空间,判断当前交换活动还应看 si/so。存量和当前速率应分开理解。
资料来源:procps-ng vmstat 手册、Linux 内核 /proc 统计说明、sysstat iostat 手册。
Linux perf record 采样权限与调用栈配置
- 上一篇
- Linux perf record 采样权限与调用栈配置
- 下一篇
- Linux tmpfiles.d 临时目录清理规则的部署
-
- 文章 · linux | 1小时前 | Linux · Linux tmpfiles.d systemd-tmpfiles 临时目录清理
- Linux tmpfiles.d 临时目录清理规则的部署
- 223浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux perf record 采样权限与调用栈配置
- 301浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux systemd.socket ListenDatagram 怎样监听 UDP 套接字
- 216浏览 收藏
-
- 文章 · linux | 1小时前 | linux运维 · Linux Rsync 断点续传 partial-dir append-verify
- Linux rsync 部分传输后的断点续传参数
- 108浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux tar 排除规则与目录层级的打包
- 434浏览 收藏
-
- 文章 · linux | 1小时前 | Linux ·
- Linux nftables 集合规则的批量维护
- 112浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux find 按时间与大小组合筛选文件
- 404浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux ip 命令查看策略路由命中顺序
- 118浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux systemd RestrictAddressFamilies 怎样限制服务使用的网络协议族
- 117浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux systemd-escape 怎样把路径转换成实例化 unit 名称
- 382浏览 收藏
-
- 文章 · linux | 1小时前 | 定时器 · Linux · 运维 · 服务管理 · Linux 定时任务 OnCalendar 单调时间 systemd.timer OnBootSec
- Linux systemd.timer 日历与单调时间的选择
- 430浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux systemd.path 监听文件变化的触发配置
- 123浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 756次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 754次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 834次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 800次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 635次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览

