vmstat bi/bo 极高但无明显 IO 密集进程的 page cache 回写压力排查

发布时间 - 2026-01-28 00:00:00    点击率:
vmstat中bi/bo持续高位说明内核正频繁进行块设备读写,常见于page cache回写、swap活动、ext4/jbd2日志提交或内存回收刷盘,而非用户进程直接IO。

vmstat 中 bi/bo 持续高位说明什么

这表示内核正在频繁进行块设备的读(bi)和写(bo)操作,但不等于有用户态进程在直接做大量 IO。常见于 page cache 回写、swap 活动、ext4/jbd2 日志提交、或内存回收触发的脏页刷盘。此时 tophtop 看不到明显 IO 进程,恰恰是因为压力来自内核路径而非用户进程的 read()/write() 系统调用。

确认是否为 dirty page 回写主导

检查当前脏页比例和回写参数:

$ grep -E 'Dirty|Writeback|Ratio' /proc/vmstat
$ sysctl vm.dirty_ratio vm.dirty_background_ratio vm.dirty_expire_centisecs vm.dirty_writeback_centisecs

关键判断点:

  • vmstat 1 中若 bo 高而 bi 很低,大概率是回写(不是读缓存失效)
  • /proc/vmstatpgpgout 增速远高于 pgpgin,且 pgmajfault 无明显增长 → 排除 swap 活动
  • cat /proc/meminfo | grep -i dirty 显示 Dirty: 值长期接近 vm.dirty_ratio 的 70% 以上

定位回写源头:jbd2、kswapd、写缓冲区激增

运行以下命令交叉验证:

$ iostat -x 1 3    # 观察 %util 和 await,确认是否真卡在磁盘层

%util 不高但 bo 高,说明回写请求被合并/排队,尚未真正下发;若 await 同步飙升,则磁盘已成瓶颈。

进一步抓取内核线程行为:

$ pidstat -u 1 -p $(pgrep "^jbd2" | head -1)  

# jbd2 是 ext4 日志线程,高 CPU 表明日志刷盘频繁

同时检查:

  • ps auxf | grep "kswapd\|kcompactd" —— 若 kswapd CPU 占用高,可能是内存紧张触发的脏页+匿名页同步回收
  • echo 1 > /proc/sys/vm/block_dump(慎用,仅临时)+ dmesg -w 可看到具体哪个文件/设备在被回写,但会显著影响性能
  • perf record -e block:block_rq_issue -a sleep 10 && perf script 查看块请求来源(需 root)

常见被忽略的诱因和缓解动作

很多 case 其实和应用无关,而是内核参数或文件系统行为导致:

  • vm.dirty_expire_centisecs 设得过大(如默认 3000=30s),导致脏页积压后集中爆发回写 → 可尝试调小到 1500
  • 使用 noatime,nobarrier 挂载选项的 ext4 在某些内核版本下会加剧 jbd2 负载 → 改用 barrier=1 或升级内核
  • 容器环境里,overlayfs 上层写入会放大底层 dirty page 生成量,尤其搭配 tmpfs 作为 upperdir 时更隐蔽
  • 应用未显式 fsync(),但用了 O_SYNC/O_DSYNC 打开文件 → 每次 write 都触发 journal 提交,等效高频 jbd2 活动

最易被跳过的一步:确认是否启用了 systemd-journald 并将日志持久化到磁盘(Storage=persistent),它本身就会产生稳定的小块写入流,叠加 page cache 后容易推高 bo


# go  # ai  # ios  # echo  # 线程  # linux  # 而非  # 就会  # 是因为  # 用了  # 并将  # 不高  # 已成  # 过大  # 但不  # 很低 


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


相关推荐: 如何快速重置建站主机并恢复默认配置?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何获取PHP WAP自助建站系统源码?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Android仿QQ列表左滑删除操作  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  昵图网官方站入口 昵图网素材图库官网入口  如何快速生成凡客建站的专业级图册?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何快速生成高效建站系统源代码?  Laravel如何实现一对一模型关联?(Eloquent示例)  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  高防服务器如何保障网站安全无虞?  详解vue.js组件化开发实践  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何处理文件下载请求?(Response示例)  如何在橙子建站中快速调整背景颜色?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何为不同团队 ID 动态生成多个“认领值班”按钮  Python函数文档自动校验_规范解析【教程】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel distinct去重查询_Laravel Eloquent去重方法  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何用IIS7快速搭建并优化网站站点?  node.js报错:Cannot find module 'ejs'的解决办法  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  制作旅游网站html,怎样注册旅游网站?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何登录建站主机?访问步骤全解析  香港服务器如何优化才能显著提升网站加载速度?