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

vm.dirty_ratio / dirty_background_ratio 写脏页过多导致卡顿的调优

阿涛吖_4467

阿涛吖_4467

发布时间:2026-01-25 19:55:10

|

604人浏览过

|

来源于php中文网

原创

vm.dirty_ratio和vm.dirty_background_ratio引发卡顿的直接原因是:脏页超vm.dirty_background_ratio时后台刷盘启动,超vm.dirty_ratio(默认20%)则写操作被阻塞;现代大内存与磁盘吞吐不匹配导致100GB脏页刷盘耗时数分钟,引发wa%飙升、D状态进程堆积。

vm.dirty_ratio / dirty_background_ratio 写脏页过多导致卡顿的调优

为什么 vm.dirty_ratio 和 vm.dirty_background_ratio 会引发卡顿

Linux 内核用这两个参数控制脏页(被修改但尚未写入磁盘的内存页)的积压上限。当脏页总量超过 vm.dirty_background_ratio(默认 10),内核在后台启动 pdflush 或 writeback 线程开始异步刷盘;一旦突破 vm.dirty_ratio(默认 20),所有新写操作会被阻塞,直到脏页降到该阈值以下——这就是“突然卡住”的直接原因,尤其在突发大量小文件写、日志刷盘或数据库 checkpoint 场景下极易触发。

  • 典型现象:top 中 wa% 暴涨,iostat -x 1 显示 %util 接近 100% 且 await 超高,ps aux | grep "D" 可见大量 D 状态进程(不可中断睡眠)
  • 根本矛盾:默认值按总内存比例计算,但现代服务器内存大(如 512GB)、而磁盘吞吐有限(如单块 SATA SSD 约 500MB/s),20% 就是 100GB 脏页,全刷完可能耗时数分钟
  • vm.dirty_ratio 是硬上限,触达即阻塞;vm.dirty_background_ratio 是软启动点,差值越小,后台刷盘越激进,但也越容易抢占 I/O 资源

怎么设才不卡:看负载类型选策略

不能只盯着百分比,得结合实际写负载节奏和存储能力。关键不是“调低”,而是让脏页生成速度 ≤ 后台持续刷盘能力。

Linux Security Scanner
Linux Security Scanner

Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...

下载
  • 高吞吐顺序写(如 Kafka 日志、视频转码输出):
    → 适当提高 vm.dirty_background_ratio(如 15)+ vm.dirty_ratio(如 25),配合增大 vm.dirty_expire_centisecs(如 6000,即 60 秒),避免频繁触发刷盘打断写流
  • 随机小写 + 高延迟敏感(如 OLTP 数据库、容器化微服务):
    → 压低两参数(如 vm.dirty_background_ratio=5,vm.dirty_ratio=10),并缩短 vm.dirty_writeback_centisecs(如 500,即 5 秒),让脏页更早、更碎地刷出,减少单次阻塞风险
  • 混合负载(如 K8s 节点跑多种工作负载):
    → 折中设为 vm.dirty_background_ratio=10,vm.dirty_ratio=15,并务必启用 vm.swappiness=1(抑制 swap,防止脏页和 swap 争内存)

调参后必须验证的三件事

改完 sysctl 不等于生效,也不代表问题消失。要确认内核真正按预期行为运行。

  • 检查是否加载:sysctl vm.dirty_background_ratio vm.dirty_ratio,确保输出值与配置一致;若未生效,执行 sysctl -p
  • 观察实时脏页压力:grep -i dirty /proc/meminfo,重点关注 Dirty:、Writeback:、PagesDirty:,对比 MemTotal 看是否长期贴近 vm.dirty_ratio 限值
  • 验证刷盘节奏:echo 1 > /proc/sys/vm/drop_caches 后做一次可控写测试(如 dd if=/dev/zero of=/tmp/test bs=1M count=2000 oflag=direct),用 iostat -x 1 看 write 出现是否平滑、有无突刺式长 await

容易被忽略的关联项

单独调这两个参数常治标不治本,以下三点不处理,调了也白调。

  • vm.dirty_ratio 的单位是“占 MemTotal 的百分比”,但若启用了 cgroup v2 memory controller,容器内看到的 MemTotal 是其 memory.max 限制值,此时脏页上限按容器限额算——K8s 默认不限制 memory,但很多生产环境会设 limit,导致容器内脏页更快触顶
  • SSD/NVMe 场景下,vm.dirty_background_ratio 设太低(如 3)反而增加 I/O 次数,降低吞吐;应优先调 vm.dirty_writeback_centisecs 控制刷盘频率,而非一味压低比例
  • 某些发行版(如 RHEL 8+/CentOS 8+)默认启用 systemd 的 MemoryMax,会覆盖全局 vm.dirty_* 设置,需在 /etc/systemd/system.conf 中显式设置 DefaultLimitMEMLOCK=infinity 并重启 systemd
实际卡顿往往不是参数错,而是没意识到脏页行为已随硬件栈(NVMe 队列深度)、调度器(BFQ vs mq-deadline)、甚至文件系统(XFS 的 logbsize)联动变化。调参只是入口,背后得连着 I/O 栈一起看。

热门AI工具

更多
DeepSeek

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

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

WorkBuddy

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

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3166

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

690

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

664

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

730

2026.02.04

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3688

2023.11.20

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6647

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2748

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6647

2023.07.18

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

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