文件是什么
/proc/zoneinfo 按 NUMA 节点与内存区域(zone,如 DMA/DMA32/Normal)展示页级统计:min/low/high 三条水位线、空闲页数、活跃与非活跃的匿名页与文件页数量,以及碎片相关字段。它是判断「系统是否长期贴着低水位运行」「是否某个节点或 zone 单独紧张」的基础文件——内核的回收、压缩与 OOM 判断都建立在这些水位之上。
基本信息
| 读取方式 | cat /proc/zoneinfo(普通用户一般可读) |
|---|---|
| 组织结构 | 按 Node 分组,每个 Node 下含多个 zone |
| 关键字段 | pages free、managed、min/low/high、nr_active_anon/file |
| 单位 | 页,通常 4 KiB,可用 getconf PAGESIZE 确认 |
| 相关文件 | /proc/buddyinfo(各阶块)、/proc/meminfo(全局汇总) |
| 容器视角 | 多为宿主数据,不能代表容器自身限额 |
典型使用场景
- 判断该调 水位比例 还是 min_free_kbytes:先看当前水位与 free 的关系
- 排查单节点内存紧张:多 NUMA 机器上只有一个 zone 吃紧也会触发回收压力
- 解释「free 看着还有不少就开始回收」:水位不足或 zone 内碎片导致
- 观察 boost 抬升是否发生过,验证碎片化水位机制是否在起作用
- 核对空闲页换算成字节后与业务预估是否一致,为容量评估提供底数
查看关键行
查看关键行
grep -E 'Node|zone|pages free|managed' /proc/zoneinfo | head -40 # 先看整体结构
awk '/Node/{n=$2} /zone/{z=$2} /pages free/{print n, z, $3}' /proc/zoneinfo # 逐 zone 汇总空闲页
awk '/^ *min|^ *low|^ *high/{print $1, $2}' /proc/zoneinfo | head # 三条水位线
cat /proc/buddyinfo # 各阶空闲块,配合判断碎片
numactl --hardware | head # 确认节点数与各节点内存规模
getconf PAGESIZE # 页大小,用于把页数换算成字节字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| pages free | 当前空闲页数 | 与水位比较判断余量 |
| managed | 该 zone 管理的总页数 | 反映区域规模 |
| min | 最低水位 | 跌破即触发同步直接回收 |
| low | 低水位 | 达到此处唤醒 kswapd |
| high | 高水位 | 回到此处 kswapd 停止回收 |
| nr_active_file | 活跃文件页数量 | 文件缓存压力大的表现 |
多 NUMA 节点必须分节点看:整机 free 充裕并不代表每个 zone 都健康,单个节点或单个 zone 紧张就足以造成分配延迟、频繁回收甚至 OOM。只看 /proc/meminfo 的汇总数字会把这些局部问题平均掉。
水位值不是固定常量,会随 min_free_kbytes、watermark_scale_factor 以及碎片化时的瞬态抬升而变化。跨时间比较水位时应连同这些参数一起记录,否则无法解释差异来源。