直接查看 /proc/meminfo 中的 Dirty:(待写回脏页,单位 kB)和 Writeback:(正在写回的字节数)可实时掌握脏页状态;Writeback 降为 0 才表示本轮刷盘基本完成,而非仅看 Dirty 是否减少。
怎么看当前 Dirty 页大小和 Writeback 进度
直接看
最快,但要注意字段含义和单位:
是待写回磁盘的脏页总字节数,单位是
(不是 MB),比如
≈ 122 MB
是当前正在提交 IO 写回的脏页字节数,它下降到 0 才代表这次刷盘动作基本完成
别只盯
—— 它可能因新写入而边刷边涨;真正反映“是否还在扛压”的是
是否持续非零
实时观察命令:
为什么 sync 后 Dirty 不归零,是不是没生效
不是没生效,是
只发请求、不等结果。内核按策略分批提交 IO,尤其在慢盘或高负载下,
可能持续几十秒甚至几分钟。
常见误判:执行
后立刻
,发现
几乎没变 → 其实是刷写还没开始或刚起步
监控脚本若用 “
” 判断是否清完 → 结果必然不可靠
更稳妥的做法是轮询
是否降为 0,或搭配
降低刷盘优先级,避免干扰业务 IO
怎么算 Dirty 阈值是否快被击穿
阈值不是按
算的,而是基于
(可用内存 + 可回收缓存),公式是:
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
查当前值:
或
查可用内存:
例如
、
→ 阈值 ≈ 14.1 GB
当
持续接近这个值,写入进程就会被阻塞(进入
等待路径),表现为应用卡顿、延迟飙升
drop_caches 能不能清脏页
不能。
只清理 PageCache、dentries 和 inodes,对脏页完全无效。
执行后
不变,甚至可能因缓存释放导致后续写入更快变脏
真要清脏页只有两种方式:等内核自动刷(依赖
,默认 3000 = 30 秒)、或触发同步写(
+ 等
归零)
SSD 上盲目调高
并不更稳——写放大、延迟毛刺、突然卡顿的风险反而上升
脏页问题的核心从来不是“怎么清”,而是“怎么让写入节奏和回写能力匹配”。盯着
和
里的
/
,比反复
有用得多。
/proc/meminfoDirty:kBDirty: 124560 kBWriteback:Dirty:Writeback:watch -n 1 "cat /proc/meminfo | grep -E '^(Dirty|Writeback):'"syncWriteback:synccat /proc/meminfoDirty:sync && sleep 1 && check DirtyWriteback:ionice -c 3 syncMemTotalMemAvailableDirty 阈值(KB) = MemAvailable × vm.dirty_ratio / 100sysctl vm.dirty_ratiocat /proc/sys/vm/dirty_ratiocat /proc/meminfo | grep MemAvailableMemAvailable: 24602012 kBvm.dirty_ratio = 60Dirty:pdflushecho 3 > /proc/sys/vm/drop_cachesDirty:vm.dirty_expire_centisecssyncWriteback:vm.dirty_ratioWriteback:vmstat -spgpgoutpswpoutsync