首页/系统/Linux 内核与性能调优速查/vm.dirty_ratio 脏页回写硬阈值
sysctl 内核参数72 条

vm.dirty_ratio 脏页回写硬阈值

脏页占内存百分比达到该值(默认 20)时,写进程被迫参与同步回写,是写抖动(write stall)的常见来源。

dirty_ratio 是什么

vm.dirty_ratio 是脏页占比的硬阈值,默认 20,按可回收内存计算。写入数据先落在页缓存里成为脏页,内核在后台异步刷盘;如果写入速度持续高于回写速度,脏页比例涨到这个阈值,内核就会让正在写文件的进程自己去做同步回写并阻塞等待。这个从异步转同步的切换点,是应用观测到写延迟尖刺(常说写抖动、写卡顿)的最常见来源。

基本信息

参数vm.dirty_ratio(百分比,默认 20)
触发行为达到阈值后写进程被迫参与同步回写并阻塞
前一道阀值vm.dirty_background_ratio(默认 10)启动后台异步回写
定量替代vm.dirty_bytes 可直接指定字节数,与 ratio 二者只保留其一
观测指标/proc/vmstat 的 nr_dirty 与 nr_writeback
配套工具iostat 看设备消化能力,sar 看历史趋势

典型使用场景

  • 数据库服务器:写日志与刷数据时出现周期性延迟尖刺,需要确认是否脏页触顶
  • 大内存主机:按比例计算出的阈值绝对值很大,突发回写压力比小内存机器更可观
  • 排查写卡顿:区分是脏页阈值触发同步回写,还是存储设备本身已达瓶颈
  • 调优实验:降低阈值让回写更平滑,观察延迟分布的改善
  • 容器与共享主机:评估邻居的大批写入是否通过内存回收间接影响自身

观察与调整

观察与调整
sysctl vm.dirty_ratio vm.dirty_background_ratio   # 读两个阈值
cat /proc/vmstat | grep -E 'nr_dirty|nr_writeback'  # 当前脏页与回写中的页数
sar -r 1 5                                          # 观察脏页占比的历史变化
iostat -x 1 5                                       # 设备利用率与排队深度
sysctl -w vm.dirty_ratio=10                         # 临时降低硬阈值

落盘与回读

落盘与回读
# /etc/sysctl.d/99-vm-writeback.conf
vm.dirty_ratio = 10              # 写敏感服务常用 10~15
vm.dirty_background_ratio = 5    # 更早启动异步回写,削峰
# 回读命令:sysctl vm.dirty_ratio vm.dirty_background_ratio

脏页指标读法

指标含义正常与异常
nr_dirty当前脏页数量(单位页)周期性地冲到阈值附近说明回写能力不足
nr_writeback正在回写中的页数与 nr_dirty 同步走高说明设备忙不过来
设备利用率磁盘繁忙程度百分比长时间接近满值说明瓶颈在设备而非阈值
写延迟分布应用侧观测的写入耗时出现周期性尖刺通常与同步回写相关
按比例设定在大内存机器上会被放大:256GB 内存按 20% 计算意味着约 51GB 脏页才触发同步回写,一旦触发,回写压力与延迟尖刺都比小内存机器明显。这类场景更适合改用 vm.dirty_bytes 直接给出绝对上限。
降低阈值能减小单次回写峰值,但会提高回写频率、增加对存储的持续压力。如果设备的写入能力本身就吃紧,压阈值只会让抖动更频繁,需要先解决存储侧问题。

易错点

  • 把脏页阈值当成唯一原因:先用 iostat 确认设备的消化能力,再判断是阈值触发还是设备瓶颈
  • 只调 dirty_ratio 不调后台阈值:异步回写的起点没变,同步阻塞依旧会发生
  • 在大内存机器上沿用百分比直觉:绝对数值远大于预期,需要改用按字节定量
  • 同时设置 ratio 与 bytes 两类参数:二者互斥,后设置的会清掉另一个,配置效果与预期不符
  • 调整后不做延迟基线对比:无法确认抖动是减轻还是只换了发生频率

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
  • Linux 内核 Documentation/admin-guide/mm/
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌