本文介绍了通过为 Page Cache(文件缓存)设置预留内存空间,解决因大量匿名页申请导致文件缓存颠簸的问题,从而缓解因持续回收 Page Cache 所引发的系统稳定性问题(例如无法触发 OOM)。
Alibaba Cloud Linux 3 引入了 vm.min_cache_kbytes 参数。该功能在不同内核版本中经历了两次重要更新:
功能引入:内核版本 5.10.112-11 首次引入了
vm.min_cache_kbytes参数及手动配置能力。自适应默认值:内核版本 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>