跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在Linux中查看内存中的脏页数量 Linux监控磁盘回写压力的方法

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

相关文章