Linux内核通过dirty_background_ratio和dirty_ratio控制脏页管理:前者触发后台异步刷盘,后者导致同步阻塞写操作;二者须满足background
Linux 内核通过
dirty_ratio和dirty_background_ratio控制内存中“脏页”(即已修改但尚未写入磁盘的页)的积累上限,直接影响 I/O 压力、响应延迟和系统稳定性。当应用频繁写文件(如数据库、日志服务、大数据任务),若这两个参数设置不合理,容易触发突发性刷盘、进程阻塞(write()被卡住)、甚至系统抖动。理解两个参数的实际行为
dirty_background_ratio:内存中脏页占比达到该百分比(相对于可用内存,非总内存)时,内核后台线程(
bdflush或writeback)开始异步刷脏页到磁盘。它不阻塞写操作,只启动“悄悄清理”。dirty_ratio:脏页占比达到该值时,所有新写操作(如
write())会被同步阻塞,直到脏页降至dirty_ratio以下。这是最后防线,直接影响应用吞吐和延迟。二者关系必须满足:
dirty_background_ratio ,否则后台刷盘永远不会启动,全靠前台阻塞扛压。常见过载场景与典型误配
- 默认值(如
dirty_background_ratio=10,dirty_ratio=20)在大内存机器(如 128G+)上易导致“积压过多才动手”,后台刷速跟不上写速,最终撞上dirty_ratio引发大面积 write 阻塞;- 将
dirty_ratio设得过高(如 40),虽减少阻塞频次,但单次刷盘数据量巨大,可能打爆磁盘 IOPS,造成秒级 I/O stall;- 在 SSD 或 NVMe 上仍沿用机械盘时代的保守值(如 background=5),浪费高吞吐能力,限制写入并发;
- 未结合
dirty_expire_centisecs(脏页老化时限,默认3000=30秒)和dirty_writeback_centisecs(后台刷盘周期,默认500=5秒)协同调整,导致老化页堆积或唤醒太稀疏。面向负载的调优建议
调优不是设固定值,而是匹配你的存储能力和写入特征:
- 高吞吐写入型(如 Kafka broker、MySQL InnoDB buffer pool 大写):适当降低
dirty_background_ratio(如 5~8),加快后台介入;dirty_ratio控制在 10~15 之间,避免单次刷盘雪崩;同时缩短dirty_writeback_centisecs(如 100~200)让后台更勤快;- 低延迟敏感型(如实时交易网关、时序数据库 ingest):优先保响应,可设
dirty_background_ratio=3~5,dirty_ratio=8~10,辅以vm.dirty_expire_centisecs=1000(10秒老化),让脏页不过夜;- 混合负载或不确定写模式:推荐保守起步——
dirty_background_ratio=10,dirty_ratio=15,再根据/proc/vmstat中的pgpgout、pswpout及iostat -x 1的%util、await实时观察:若await持续 >5ms 且pgpgout突增,说明刷盘已成瓶颈,需下调两 ratio;- 永远避免
dirty_ratio ≥ 30,除非你确认磁盘持续吞吐能稳稳吃下对应脏页量(例如:128G内存 × 30% = 38.4G 脏页,需在几秒内刷完,对普通 SATA SSD 几乎不可行)。验证与持续监控方法
不要只改完就收工。每次调整后至少观察 1~2 个业务高峰周期:
- 查当前值:
sysctl vm.dirty_background_ratio vm.dirty_ratio;- 看脏页实时状态:
grep -i dirty /proc/meminfo(关注Dirty:、Writeback:);- 跟踪刷盘行为:
cat /proc/vmstat | grep -E "pgpgout|pgpgin|pswpout",配合时间戳看单位时间增量;- 关键指标告警建议:当
Dirty长期 >dirty_background_ratio× 可用内存 × 0.8,或Writeback持续 > 500MB,即提示后台已忙不过来,需干预。
0
0
/ proc/sys/vm/dirty_ratio 和 dirty_background_ratio 写脏页过多的调优经验
相关文章
Linux日志集中管理思路_多主机统一分析方案【教程】
Linux部署MySQL流程_数据库安装初始化优化参数全链路解析【教程】
Linux磁盘空间如何排查_高频场景实战指导更易上手【教程】
Linux LNMP环境搭建说明_Linux NginxMySQLPHP完整教程
Linux MySQL安装配置教学_Linux数据库环境搭建指南
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。
664
2023.06.20
存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。
246
2023.06.21
mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。
281
2023.07.18
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。
515
2023.07.19
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。
255
2023.07.25
MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。
386
2023.08.08
SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
530
2023.08.11
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。
599
2023.08.14
热门下载
相关下载
精品课程
最新文章



