为page cache设置预留内存空间以解决因大量匿名页申请导致文件缓存颠簸的问题

更新时间:
复制为 MD 格式

本文介绍了通过为 Page Cache(文件缓存)设置预留内存空间,解决因大量匿名页申请导致文件缓存颠簸的问题,从而缓解因持续回收 Page Cache 所引发的系统稳定性问题(例如无法触发 OOM)。

Alibaba Cloud Linux 3 引入了 vm.min_cache_kbytes 参数。该功能在不同内核版本中经历了两次重要更新:

  1. 功能引入:内核版本 5.10.112-11 首次引入了 vm.min_cache_kbytes 参数及手动配置能力。

  2. 自适应默认值:内核版本 5.10.134-18 及更高版本进一步增强了该功能,能够根据 ECS 实例的总内存大小自动设置合理的默认预留值,以适配不同规格实例的内存管理需求。

使用限制

  • 操作系统:Alibaba Cloud Linux 3

  • 基础功能支持:内核版本 ≥ 5.10.112-11(需手动配置)

  • 自动默认值支持:内核版本 ≥ 5.10.134-18

默认配置说明(内核版本 ≥ 5.10.134-18)

如果您使用的是 5.10.134-18 或更高版本的内核,系统会根据实例的总物理内存大小,自动初始化 vm.min_cache_kbytes 的值。具体的默认映射关系如下:

总内存范围 (Total Memory)

默认预留值 (min_cache_kbytes)

(0, 4G]

150 MB

(4G, 8G]

300 MB

(8G, 16G]

400 MB

(16G, 128G]

500 MB

> 128G

1024 MB (1 GB)

重要
  • 上述默认值是基于通用场景的经验值。在大多数情况下,默认配置即可满足系统稳定运行需求。

  • 如果您的内核版本在 5.10.112-11 到 5.10.134-18 之间,该参数存在但不会自动设置上述默认值(初始值通常为 0),您需要根据下文步骤手动设置。

调整建议

无论您使用的是哪个版本,如果在业务运行过程中发现以下情况:

  • 系统在当前配置下频繁发生 OOM (Out Of Memory) kill 现象;

  • 观察到因 Page Cache 被过度回收导致的文件读写性能抖动;

建议结合实际的内存使用情况手动调整 vm.min_cache_kbytes 参数。

警告
  • 设置过大风险:若为 Page Cache 设置的预留空间过大,会导致用户态可用内存(匿名页空间)减少,从而引起过早出现 OOM 的情况,可能导致正常业务进程被杀死。

  • 设置过小风险:若设置过小(或为 0),可能无法有效缓解文件缓存颠簸问题,导致系统在高负载下不稳定。

  • 操作建议:请务必根据实际业务负载、内存监控数据以及当前的内核版本谨慎调整。

操作步骤

<KB> 需替换为您希望设置的预留大小,单位为千字节 (kbytes)。

  • 例如:设置 1 GB 的 Page Cache 预留,<KB> 应为 1048576

  • 若 <KB> 值为 0,则代表关闭该功能的强制预留限制。

方法一:通过/proc接口设置page cache预留。

sudo sh -c 'echo <KB> > /proc/sys/vm/min_cache_kbytes'

方法二:通过 sysctl 设置page cache预留。

sudo sysctl -w vm.min_cache_kbytes=<KB>