0

0

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

舞夢輝影

舞夢輝影

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

|

804人浏览过

|

来源于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_ratiovm.dirty_background_ratio 怎么配合 dirty 回写节奏?

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

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

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

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

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

AimiAD
AimiAD

通过 AimiAD 让您的 AI 应用开始赚钱

下载
  • 查实时脏页状态: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 观察 %utilawait:若 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/ 下的 memory.pressureio.pressure 才是更直接的信号源。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

857

2023.10.12

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

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

332

2023.10.27

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

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

351

2024.02.23

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

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

1489

2024.03.06

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

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

365

2024.03.06

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

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

1046

2024.04.07

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

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

581

2024.04.29

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

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

431

2024.04.29

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

67

2026.02.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

ASP 教程
ASP 教程

共34课时 | 4.6万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号