首页/系统/Linux 内核与性能调优速查/vm.zone_reclaim_mode NUMA 本地回收
sysctl 内核参数72 条

vm.zone_reclaim_mode NUMA 本地回收

控制内存节点耗尽时是否优先在本地节点回收(而非跨节点分配):0 关闭为默认;开启后可能降低远程访问但增加回收开销。

NUMA 本地回收开关

在 NUMA 机器上,某内存节点的空闲内存低于水位时有两种选择:跨节点向邻居借内存(远程访问,延迟更高),或优先在本节点回收可回收页(代价是回收 CPU 开销)。vm.zone_reclaim_mode 是决定是否走后者的按位开关:0 关闭(现代内核默认),非 0 时可按位叠加「回收时包含写回脏页」「回收时使用 swap」等行为。

基本信息

参数名vm.zone_reclaim_mode
默认值0(关闭)
取值含义按位:1 启用本地回收,2 回收含脏页写回,4 回收可使用 swap
相关观测numastat、numastat -m
生效范围全机,写入需要 root

典型使用场景

  • 跨节点访存确认是瓶颈的机器上做受控实验
  • 文件缓存占满节点内存,业务申请本地内存变慢
  • 与 numactl 手工绑定方案对比,选更适合业务的策略
  • 复盘「远程访问多但回收开销小」这一取舍是否仍成立
  • 基线审计:确认该开关是否被第三方调优脚本改动过

查看与观测

查看与观测
sysctl vm.zone_reclaim_mode
numastat -m | head -12        # 各节点内存与命中情况
numastat | head -20           # numa_hit 与 numa_miss 计数
cat /proc/zoneinfo | grep -E 'Node|min|low|high' | head -24   # 各节点水位
sysctl kernel.numa_balancing  # 与自动均衡是否同时开启
sysctl -w vm.zone_reclaim_mode=1   # 试探性开启,同时观测业务延迟

按位取值含义

取值含义使用场景
0关闭节点内回收,优先跨节点分配默认值,适合多数通用负载
1启用节点内回收跨节点访问确为瓶颈时测试
2节点内回收包含写回脏页需要在回收时落盘,通常与 1 组合为 3
4节点内回收允许使用 swap有 swap 且希望业务留在本地,通常与 1 组合为 5
现代内核默认关闭是权衡的结果:开启后内存紧张的节点会反复回收而不是借用邻居内存,常见表现是 CPU 回收开销上升。
是否值得开启取决于 numastat 的 miss 分布与业务的延迟分布,不要仅凭「本地内存更快」的理论直接改生产配置。

易错点

  • 凭直觉开启本地回收:回收的 CPU 与 I/O 开销可能超过远程访问代价,必须实测才有结论
  • 只调这一个开关:它与 numa_balancing、numactl 绑核绑节点策略相互影响,应成套评估
  • 把按位取值当布尔值:写 1 与写 3 行为不同,含义不同
  • 没有基线就开启:无法区分延迟变化来自参数还是负载波动
  • 忽略含 swap 的位:允许用 swap 回收后可能把热页换出,反而增加访问延迟

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
  • Linux 内核 Documentation/admin-guide/mm/numa_memory_policy.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌