最准确、开销最小的方式是直接查看 /proc/meminfo 中的 dirty: 和 writeback: 行(单位 kb),dirty 表示已修改未写回的字节数,writeback 表示正在刷盘的数据量;vmstat -sm 的 dirty 列为页数需换算,且刷新延迟高;sync 不阻塞完成,应轮询 writeback 是否归零;dirty 超 vm.dirty_ratio 会触发写入阻塞,属正常背压机制。

怎么看当前 Dirty 字节数和 Writeback 状态
直接看 /proc/meminfo 里的 Dirty: 和 Writeback: 行,单位是 kB,不是 MB 或 GB。这是最准确、开销最小的方式。
-
Dirty:表示已修改但还没开始写回磁盘的页面总字节数 -
Writeback:表示正在被内核提交 IO、正往磁盘刷的数据量 - 执行
cat /proc/meminfo | grep -i dirty即可,注意输出中大小写不敏感,但字段名固定为Dirty:和Writeback: - 别只扫一眼——脏页可能在你查看瞬间正被刷走,
Writeback:非零时Dirty:下降是正常现象
vmstat -sm 能不能替代 /proc/meminfo
能看,但精度和语义有差异:vmstat -sm 的 dirty 列其实是“待刷页数”(page 数),不是字节数;而 /proc/meminfo 给的是真实字节数,更直观、更可靠。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
vmstat -sm输出中的dirty是 page count(默认 4KB/page),需乘以 4096 才能换算成字节,容易误判 -
vmstat默认刷新间隔长(如 1 秒),对瞬态高峰不敏感;/proc/meminfo是即时快照 - 监控脚本里建议用
grep -oP 'Dirty:\s*\K\d+'直接提取数值,避免解析整行出错
为什么 sync 后 Dirty 不归零
sync 只是触发刷盘请求,不是阻塞等待完成。内核按 vm.dirty_ratio、vm.dirty_background_ratio 和设备吞吐能力分批调度 IO,尤其在 SSD 写放大或 HDD 随机写场景下,Writeback: 可能持续几十秒甚至几分钟。
- 执行
sync后立刻查Dirty:几乎不变 → 正常,不代表失败 - 判断是否“刷完”,应轮询
Writeback:是否降到 0,而不是盯Dirty: - 高负载下强行等
Dirty:归零可能卡住业务,更稳妥的是用ionice -c 3 sync降低刷盘优先级
Dirty 比例超阈值会怎样
当 Dirty: 字节数 ≥ MemTotal × vm.dirty_ratio / 100,内核会阻塞新写入(write() 系统调用卡住),直到脏页回落到 vm.dirty_background_ratio 以下。这不是错误,是背压机制。
- 查阈值:运行
sysctl vm.dirty_ratio vm.dirty_background_ratio - 计算临界值:比如
MemTotal: 131755760 kB,vm.dirty_ratio = 20→ 临界点 ≈ 26.3 GB - 如果
Dirty:长期卡在临界值 80% 以上,说明后台刷盘跟不上写入节奏,得查 IO 负载或调整参数 - SSD 上盲目调高
vm.dirty_ratio可能导致突发写入时卡顿更剧烈,不是越大胆越好
/proc/meminfo 里那两行数字,得结合 vmstat 1 的 bi(块入)和 bo(块出)列一起看,才看得清全貌。










