本文介紹了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'
文檔內容是否對您有幫助?