sar 显示 %iowait 非常高但 iostat 看不出哪个盘特别忙的排查技巧

发布时间 - 2026-01-20 00:00:00    点击率:
iowait高但iostat无异常说明I/O等待源于非磁盘环节,需排查容器文件系统、block层延迟、tmpfs/overlayfs等伪设备及内核路径阻塞。

sar 显示 %iowait 持续很高(比如 >30%),但 iostat -x 1 却看不出某块磁盘的 %util、await 或 avgqu-sz 明显异常——这说明 I/O 等待不是来自“典型慢盘”,而是被系统其他环节“吃掉”了,或者 I/O 行为本身很隐蔽。这种情况常见于容器环境、文件系统层开销大、短时突发 IO、或内核路径阻塞等场景。

先确认 iowait 是否真由磁盘 I/O 引起

iowait 高 ≠ 磁盘忙。它只是 CPU 在空闲时等待 I/O 完成的时间占比。所以要排除干扰:

  • 检查 CPU 是否真的有 idle 时间:如果 %idle 极低(如
  • vmstat 1 看 b(blocked 进程数)和 r(runnable 进程数):若 b 长期 >0,说明确有进程卡在不可中断睡眠(D 状态),这才是真 I/O 阻塞信号;
  • 运行 pidstat -u 1pidstat -d 1 对照看:如果 %iowait 高,但各进程的 IO KB/s 和 %io 都很低,大概率是 block 层或驱动层延迟,而非应用写得多。

盯住 block 层和 bio 路径,而不是只看设备层

iostat 只统计到 request queue 层面,对更上游的 bio 分发、合并、调度不敏感。以下命令能挖得更深:

  • cat /proc/diskstats:对比各设备的 “# of IOs merged”、“# of requests”、“# of sectors read/written”,看是否大量 IO 被 merge 掉,导致 iostat 的 r/s/w/s 失真;
  • blktrace -d /dev/sda -o - | blkparse -i -(需 root):捕获真实下发的 bio 和 request 事件。重点关注 “Q”(queue)、“G”(getrequest)、“C”(complete)之间的时间差。若 Q→G 延迟长,说明 block

    层调度/队列深度不足;若 G→C 很长,才指向设备或驱动问题;
  • echo 1 > /sys/block/sda/stat(谨慎)+ 再读一次 /sys/block/sda/stat:可临时触发一次 stat 刷新,辅助判断是否因统计缓存导致 iostat 滞后。

排查 overlayfs、tmpfs、loop 设备等“非物理盘”路径

尤其在 K8s 或 Docker 环境中,高 iowait 常来自文件系统层,而非底层磁盘:

  • 运行 findmnt -t overlay,overlayfs,xfs,ext4,tmpfs,确认是否有 overlayfs 下层(lowerdir/uppperdir)挂载在高 IO 目录;
  • 查容器数据目录是否用了 emptyDirhostPath 绑定到 tmpfs(内存盘):tmpfs 写满会触发 swap 或 OOM Killer,但 iostat 不显示任何磁盘活动;
  • lsof + grep -E "(REG|DEL)" 查高 IO 进程打开的文件路径,重点识别:/var/lib/kubelet/pods/.../volume-subpaths/.../dev/loop*/tmp/xxx ——这些都不是真实磁盘,但会消耗 CPU 在 copy-up、page cache 回写等操作上。

检查内核日志与 multipath/NVMe 特定行为

某些硬件/驱动问题不会让磁盘“忙”,却会让 IO 在途中卡住:

  • dmesg -T | grep -i "block\|nvme\|multipath\|fail\|timeout":查找 “blk_update_request: I/O error”、“nvme 0000:01:00.0: timeout”, 或 multipath “switching to [path]” 类日志;
  • NVMe 设备注意 cat /sys/class/nvme/nvme0/nvme0n1/queue_depth 和当前 cat /sys/class/nvme/nvme0/nvme0n1/io_poll_delay:队列过浅或轮询延迟设置不当,会导致大量 short-lived IO 在 kernel 中排队,但 iostat 看不出压力;
  • perf record -e block:block_rq_issue,block:block_rq_complete -a sleep 10 + perf script:看 issue → complete 的延迟分布,若大量请求耗时 >10ms 且未落到设备,就说明 block 层或 driver 是瓶颈。


# docker  # ai  # ios  # switch  # echo  # Error  # class  # var  # copy  # 事件  # kubelet  # issue  # 文件系统  # 会让  # 而非  # 不出  # 闲时  # 很高  # 用了  # 得多  # 这种情况  # 看不出 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现支付功能_Laravel集成支付宝微信支付  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何做网站制作流程,*游戏网站怎么搭建?  如何在阿里云部署织梦网站?  nodejs redis 发布订阅机制封装实现方法及实例代码  Laravel如何使用Service Container和依赖注入?(代码示例)  javascript日期怎么处理_如何格式化输出  网易LOFTER官网链接 老福特网页版登录地址  如何用AWS免费套餐快速搭建高效网站?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何在万网自助建站平台快速创建网站?  html5的keygen标签为什么废弃_替代方案说明【解答】  原生JS实现图片轮播切换效果  如何快速建站并高效导出源代码?  javascript基本数据类型及类型检测常用方法小结  如何快速搭建高效可靠的建站解决方案?  bing浏览器学术搜索入口_bing学术文献检索地址  如何获取免费开源的自助建站系统源码?  php json中文编码为null的解决办法  如何在橙子建站中快速调整背景颜色?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  如何在阿里云高效完成企业建站全流程?  Android自定义listview布局实现上拉加载下拉刷新功能  如何在IIS中配置站点IP、端口及主机头?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  详解Android图表 MPAndroidChart折线图  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何用美橙互联一键搭建多站合一网站?  装修招标网站设计制作流程,装修招标流程?  html如何与html链接_实现多个HTML页面互相链接【互相】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在IIS7上新建站点并设置安全权限?  如何快速搭建高效服务器建站系统?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何打造高效商业网站?建站目的决定转化率  Python文件流缓冲机制_IO性能解析【教程】  如何快速生成可下载的建站源码工具?  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何获取PHP WAP自助建站系统源码?