当前位置:首页 > 文章列表 > 文章 > linux > Linux vmstat 指标与 I/O 等待的判断

Linux vmstat 指标与 I/O 等待的判断

来源:17golang原创 2026-10-28 13:35:49 0浏览 收藏

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 任务、CPU 时间和吞吐指标的分组关系
静态结构图:b、wa、bi/bo 属于不同统计维度,需要结合采样窗口一起解释。

用有限采样避开首行误读

# 记录本机实现与可用选项,避免套用其他版本表头。
vmstat --version
vmstat --help

# 每秒更新,使用有限次数,保留表头并附时间戳。
vmstat -w -t 1 11

默认首行中的累计速率和 CPU 时间比例反映开机以来的统计,而后续行反映采样间隔。进程和内存部分即使在首行也是瞬时信息。因此不能把首行整行都当成过去一秒,也不能把其中每个字段都称为开机均值。

读取上面的报告时,保留首行但将它与后续区间分开。若本机支持 -y,可以省略首个开机统计报告:

# 本机支持 -y 时,略过开机以来的首个报告。
vmstat -y -w -t 1 10

如果某选项不可用,就使用本机支持的基本命令,并手动区分首行,不必为了采样升级整套系统。出现字段挤在一起时,宽输出有助于读表;自动化解析则应依据实际表头,而不是写死“第几列就是 wa”。

把 wa、b 和 bi/bo 放在一起看

字段统计含义不能直接推出的结论
waCPU 时间中归入 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 也不应直接当成所有场景下的性能上限判断。

如果主机使用逻辑卷、设备映射或云盘,要先把业务文件所在存储与设备统计对应起来。先确认观察对象,再讨论瓶颈;否则看到一块无关设备繁忙,也不能解释应用变慢。

主机概览、设备统计与业务时延的证据关系
静态说明图:同一时间窗口连接主机、设备和业务证据,三者共同支持或削弱 I/O 等待假设。

处理版本、虚拟机和观察误区

内核文档明确指出 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 手册。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux perf record 采样权限与调用栈配置Linux perf record 采样权限与调用栈配置
上一篇
Linux perf record 采样权限与调用栈配置
Linux tmpfiles.d 临时目录清理规则的部署
下一篇
Linux tmpfiles.d 临时目录清理规则的部署
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    756次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    754次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    834次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    800次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    635次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码