本文介绍了Linux的memcg残留问题导致系统卡顿或内存不足的原因及解决方案。
问题现象
系统在长时间运行后出现卡顿或内存不足等问题,同时也会出现大量不可回收的unreclaimable slab
和percpu
内核内存占用。尽管memcg
的数量较大,但在/sys/fs/cgroup/memory/
目录下的文件夹数量却相对较少。
问题原因
Linux的memcg
子系统中的kmem
存在设计缺陷。当memcg kmem
功能被启用时,如果用户删除该memcg
,内核内部某些结构数据仍会保留,这将导致系统在长时间运行后出现卡顿或内存不足等问题。
符合以下条件的系统会出现此问题。
Alibaba Cloud Linux 3(内核5.10.134-12.2之前版本)。
Alibaba Cloud Linux 2(内核4.19.91-26.6之前版本)。
其它主流Linux发行版本。
解决方案
禁用memcg kmem功能。
sudo grubby --update-kernel=ALL --args='cgroup.memory=nokmem'
重启系统使配置生效。
sudo reboot
查看执行结果。
cat /proc/cmdline
结果如下图所示,表示禁用memcg kmem功能成功。
若在执行上述步骤后问题依然存在,则执行以下步骤,尝试通过memcg的周期性后台回收功能来解决该问题。
重要此功能仅适用于Alibaba Cloud Linux系统。
此功能开启后,会带来一定的CPU资源开销,根据实际情况评估后确定是否开启,如有问题请关闭后台回收功能。
开启后台回收功能。
sudo sh -c 'echo 1 > /sys/kernel/mm/memcg_reaper/reap_background'
关闭后台回收功能。
sudo sh -c 'echo 0 > /sys/kernel/mm/memcg_reaper/reap_background'
文档内容是否对您有帮助?