Linux vmstat、iostat 性能分析实践

千婷小哥_7452

千婷小哥_7452

2026-03-23

833人浏览

原创

wa高但%util不高不一定是i/o瓶颈,可能是文件系统锁、lvm元数据争用、nfs重试或page cache回刷导致;应优先看await和pidstat -d定位进程。

linux vmstat、iostat 性能分析实践

vmstat 输出里 wa 高但磁盘 %util 不高,到底是不是 I/O 瓶颈?

wa 表示 CPU 等待 I/O 完成的时间百分比,但它只反映“等待”,不反映“忙”。而 iostat -x 中的 %util 是设备忙时间占比(基于队列非空且有请求在处理的时间),两者统计逻辑不同。

常见错误现象:看到 wa > 30%,立刻断定磁盘慢;但 iostat -x 1 显示 %util await 也正常(比如

这通常说明:

  • I/O 请求确实排队了,但设备本身没饱和
  • 可能是存储栈上层瓶颈:如文件系统锁(ext4 journal 堵塞)、LVM thin pool 元数据争用、或 NFS 客户端重试风暴
  • 也可能是大量小随机写触发了内核 page cache 回刷延迟,wa 上升但块设备没真正压满

实操建议:

  • 优先看 iostat -x 1 的 await(平均响应时间)和 r_await/w_await
  • 若 await 显著升高(> 20ms 持续),再查设备层;若 await 正常但 wa 高,转向 pidstat -d 1 查哪个进程在频繁 fsync 或 write 小 buffer
  • 注意:wa 在多核下是全局平均值,单个 CPU 核可能已 100% wa,需配合 mpstat -P ALL 1 看分布

iostat -x 输出中 svctm 已被废弃,该信谁?

svctm 从 sysstat 10.0.0 开始被标记为“always 0”,文档明确说明它不再计算也不应使用。它的原始设计依赖于过时的内核计时机制,现代 I/O 调度器(如 mq-deadline、bfq)和 NVMe 多队列模型让它完全失真。

容易踩的坑:

  • 旧脚本或监控模板还在取 svctm 做“服务时间”判断,导致误报
  • 把 svctm 和 await 对比,得出“设备很快但响应慢”的错误结论

实操建议:

  • 彻底忽略 svctm 字段,所有性能判断只基于 await、r_await、w_await
  • await = svctm + queue wait time,现在它真实包含了排队开销,反而更贴近应用感知的延迟
  • 如果需要区分设备处理时间和排队时间,用 cat /sys/block/*/stat 手动算:字段 10(io_ticks)/ 字段 3(ios)≈ 平均服务时间(毫秒级,需换算),但日常分析没必要

vmstat 的 bi/bo 和 iostat 的 r/s/w/s 数值对不上,怎么校准?

bi(blocks in)和 bo(blocks out)单位是“块/秒”,默认块大小为 1024 字节(即 1 KiB),而 iostat 的 r/s、w/s 是“请求次数/秒”,不是字节数。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

关键差异:

  • vmstat 统计的是底层块设备读写的总数据量(按 1KiB 块折算)
  • iostat 默认显示请求频次;加 -k 才显示 KB/s,加 -m 显示 MB/s
  • 同一时刻,vmstat 的 bi 值 ≈ iostat -k 的 rkB/s,而非 r/s

常见错误现象:

  • 直接对比 vmstat 的 bi=200 和 iostat 的 r/s=50,以为 I/O 效率低
  • 忽略 iostat 默认输出不含单位后缀,误读数值

实操建议:

  • 要比吞吐量,统一用 iostat -k 1 看 rkB/s 和 wkB/s,与 vmstat 的 bi/bo 基本一致(允许几 % 误差,因采样时机差)
  • 要比 I/O 密集度,用 iostat -x 1 的 avgrq-sz(平均请求大小 KB)反推:若 r/s=100 且 avgrq-sz=32,则实际吞吐 ≈ 3200 KB/s,对应 vmstat 的 bi≈3200
  • 注意:XFS 日志写、ext4 journal 提交等元数据 I/O 会被 iostat 计入,但 vmstat 的 bi 包含全部,所以日志密集型负载下二者偏差会略大

用 iostat 监控云盘(如 AWS EBS gp3、阿里云 ESSD)时,%util 失效怎么办?

云盘本质是网络存储,%util 的物理设备忙时间定义失效。gp3 的吞吐和 IOPS 是独立配额,ESSD 的 burst 性能受 credits 影响——这些都无法用“设备忙比例”描述。

典型表现:

  • %util 长期 100%,但 await 仍很低(
  • 或 %util 只有 20%,但 await 突然飙到 100ms+,说明云盘限速已触发

实操建议:

  • 对云盘,%util 完全丢弃,只盯三个指标:await、r/s+w/s(是否接近 provisioned IOPS)、rkB/s+wkB/s(是否接近 provisioned throughput)
  • AWS gp3:关注 CloudWatch 中 VolumeQueueLength,iostat 里没有对应字段,需额外采集
  • 阿里云 ESSD:await 持续 > 10ms 且 r/s+w/s 接近规格值,基本可判定 credit 耗尽或突发限速

真实场景里,await 的基线波动比 %util 更敏感——哪怕只是 1~2ms 的持续抬升,结合 iostat -x 的 qu-sz(平均队列深度)同步增长,就是云盘开始吃紧的信号。别等它超时才反应。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3970

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2553

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6170

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5802

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3393

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2905

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3119

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习