发布于2026-07-01 阅读(0)
扫一扫,手机访问
/proc/meminfo文件中的Dirty:和Writeback:两行——单位是kB,简单明了。Dirty代表已经修改但尚未写回磁盘的字节数,Writeback则代表正在被内核刷入磁盘的数据量。相比之下,vmstat -sm虽然也能看,但它的dirty列是页数,需要乘以4096换算,而且刷新间隔较长,对瞬态高峰不敏感。很多人以为执行sync就能让Dirty归零,其实sync只是触发刷盘请求,并不阻塞等待完成,真正该关注的是Writeback是否降为零。另外,当Dirty比例超过vm.dirty_ratio时,内核会主动阻塞新写入——这不是错误,而是系统施加的背压机制。

直接看 /proc/meminfo 里的 Dirty: 和 Writeback: 行,单位是 kB。这是最准确、开销最小的方式。必须强调一点:这两个字段的大小写不敏感,但字段名固定为 Dirty: 和 Writeback:,用 cat /proc/meminfo | grep -i dirty 就能拿到结果。
Dirty::已修改但还没开始写回磁盘的页面总字节数。Writeback::正在被内核提交IO、正往磁盘刷的数据量。Writeback: 非零时 Dirty: 下降是正常现象。能看,但精度和语义有差异。不过得提醒一句:vmstat -sm 的 dirty 列给出的是“待刷页数”(page 数),而不是字节数。而 /proc/meminfo 给的是真实字节数,更直观也更可靠。
vmstat -sm 输出中的 dirty 是 page count(默认 4KB/page),需乘以 4096 才能换算成字节,容易误判。vmstat 默认刷新间隔长(如 1 秒),对瞬态高峰不敏感;/proc/meminfo 是即时快照。grep -oP 'Dirty:\s*\K\d+' 直接提取数值,避免解析整行出错。sync 只是触发刷盘请求,不是阻塞等待完成。内核按 vm.dirty_ratio、vm.dirty_background_ratio 和设备吞吐能力分批调度IO,尤其在 SSD 写放大或 HDD 随机写场景下,Writeback: 可能持续几十秒甚至几分钟。所以看到 sync 后 Dirty: 几乎不变——别慌,这很正常,不代表失败。
Writeback: 是否降到 0,而不是盯 Dirty:。Dirty: 归零可能卡住业务,更稳妥的做法是用 ionice -c 3 sync 降低刷盘优先级。当 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负载或调整参数。vm.dirty_ratio 可能导致突发写入时卡顿更剧烈,不是越大胆越好。实际观察脏页行为,关键不是“有没有”,而是“涨得快不快、落得慢不慢、卡不卡写”。/proc/meminfo 里那两行数字,得结合 vmstat 1 的 bi(块入)和 bo(块出)列一起看,才看得清全貌。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9