讲师中心 微信公众号
AI工具推荐 视频效率加速

vm.dirty_expire_centisecs / dirty_writeback_centisecs 导致脏页回写卡顿的调优

夏强大大_5973

夏强大大_5973

发布时间:2026-02-08 16:42:10

|

884人浏览过

|

来源于php中文网

原创

改了 vm.dirty_expire_centisecs 仍卡,因未同步调整 vm.dirty_writeback_centisecs;后者需 ≤ 前者(建议设为一半),否则过期脏页无法及时回写。

vm.dirty_expire_centisecs / dirty_writeback_centisecs 导致脏页回写卡顿的调优

为什么改了 vm.dirty_expire_centisecs 还是卡?

这个参数控制脏页“过期时间”,单位是厘秒(centiseconds),默认 3000(即 30 秒)。但单纯调小它,比如设成 500(5 秒),并不一定减少卡顿——因为内核真正触发回写,还得看 vm.dirty_writeback_centisecs 是否及时唤醒回写线程。

常见错误是只调 dirty_expire_centisecs,却忽略 dirty_writeback_centisecs 的配合。后者默认 500(5 秒),表示内核每 5 秒唤醒一次 pdflush(或现代内核的 writeback 线程)去扫描过期脏页。如果它太长,即使页已过期,也得等下一轮扫描才开始写,造成延迟堆积。

  • vm.dirty_writeback_centisecs 应 ≤ vm.dirty_expire_centisecs,否则过期页可能滞留多个周期
  • 生产环境建议设为 dirty_expire_centisecs / 2 左右,例如 expire=1000,则 writeback=500
  • 值过小(如 writeback=100)会导致频繁唤醒线程,增加调度开销,尤其在高 I/O 负载下反而加剧抖动

vm.dirty_ratio 和 vm.dirty_background_ratio 怎么配合 dirty 回写节奏?

这两个参数决定内存中脏页占比阈值,直接影响是否触发同步/异步回写,和上面两个时间参数共同构成“水位 + 时间”双控机制。

典型卡顿场景:应用突发写入大量数据,dirty_background_ratio(默认 10)很快被突破,内核启动后台回写;但如果磁盘慢,脏页持续累积,逼近 vm.dirty_ratio(默认 20),此时所有新写入线程会被阻塞,直到脏页降到 dirty_ratio 以下——这就是“卡住”的根源。

AI舌诊面诊问诊医疗系统+诊疗商城系统源码
AI舌诊面诊问诊医疗系统+诊疗商城系统源码

AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。

下载
  • 若磁盘吞吐能力弱(如机械盘、高延迟云盘),适当降低 vm.dirty_background_ratio(如设为 5),让后台回写更早介入
  • vm.dirty_ratio 不建议低于 10,否则容易因瞬时写入波动就触发阻塞;也不建议高于 30,会显著拉高 OOM 风险
  • 注意:这些 ratio 是相对于 vm.lowmem_reserve_ratio 之外的可用内存计算的,不是总内存百分比

如何验证当前 dirty 回写是否真的成为瓶颈?

别猜,用工具看实际行为。关键指标不是“有没有脏页”,而是“脏页是否堆积 + 回写是否滞后”。

  • 查实时脏页状态:grep -i dirty /proc/meminfo,重点关注 Dirty: 和 Writeback: 行。如果 Writeback 长时间 > 0 且 Dirty 持续上升,说明回写跟不上
  • 看内核日志是否有 writeback: balance_dirty_pages 相关 trace(需开启 echo 1 > /proc/sys/vm/block_dump 或用 perf),确认是否频繁进入阻塞路径
  • 用 iostat -x 1 观察 %util 和 await:若 await 突增且 Dirty 同步上涨,基本可定位为 dirty 回写压垮磁盘

SSD 和 NVMe 场景下要不要调?

要,但方向相反。SSD/NVMe 的随机写延迟低、并行度高,传统“保守延后写”的策略反而浪费性能。

默认的 30 秒过期时间对 SSD 来说太长,容易导致脏页批量冲刷,引发短时 I/O 尖峰。而 SSD 更适合细粒度、高频次的轻量回写。

  • 可将 vm.dirty_expire_centisecs 降至 500–1000(5–10 秒),vm.dirty_writeback_centisecs 设为 200–500(2–5 秒)
  • vm.dirty_background_ratio 可适度提高到 15,避免过早触发回写干扰前台 IO;但 vm.dirty_ratio 仍建议维持 20–25,防止内存耗尽
  • 注意:某些 NVMe 驱动或文件系统(如 XFS)对 writeback 线程并发数敏感,若调得太激进,可能触发 writeback: bdi-X: writeback timeout 类似错误

最易被忽略的是:这些参数在容器或 cgroup v2 环境下可能被覆盖,/sys/fs/cgroup/<code> 下的 <code>memory.pressure 和 io.pressure 才是更直接的信号源。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4603

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

951

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1209

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6601

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3343

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6560

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9021

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1230

2024.04.29

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle Wrapper 使用与安全指南
Gradle Wrapper 使用与安全指南

共0课时 | 0人学习

Golangci-lint命令行使用演示
Golangci-lint命令行使用演示

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn