引言
通过 docker info
或者 systemctl status docker
,有如下警告 WARNING: No swap limit support

实操
通过 vi /etc/default/grub
打开文件,在 GRUB_CMDLINE_LINUX
项尾部新增 swapaccount=1
(原本的东西保持不动)
1
| GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 crashkernel=384M-1800M:128M,1800M-8G:256M,8G-16G:512M,16G-:768M intel_idle.max_cstate=1 intel_pstate=disable processor.max_cstate=1 amd_iommu=on iommu=pt swapaccount=1"
|
然后通过 update-grub
,重新生成启动配置,最后通过 reboot
重启机器即可。此次再查看,发现没有警告了

理论
参考资料:已解决!docker警告WARING:No swap limit support-CSDN博客
文中提到了 cgroup_enable=memory
和 swapaccount=1
,两者解释如下
cgroup_enable=memory
:启用内存控制组功能,使容器能够限制和管理内存(属于控制组的一个子集,控制组允许将一组进程进行分组,并为该组内的进程设定资源限制)
swapaccount=1
:在 Linux 系统中,当 内存控制组(memory cgroup) 被启用时,默认情况下,交换空间并不受控制组的限制。如果启用了 swapaccount=1
,那么交换空间就可以被纳入到内存控制组的管理之中
那么,如何确定操作系统是否开启了内存控制组功能?如何确定交换分区是否纳入了内存控制组管理?如下
- 如何确定内存控制组是否开启?内存控制组通过 cgroup 文件系统 挂载到
/sys/fs/cgroup
目录。如果该目录下有 memory
子目录,说明 内存控制组 已启用
- 如何确定内存控制组下交换分区是否管控?内存控制组通过 cgroup 文件系统 挂载到
/sys/fs/cgroup
目录。如果该目录下有 memory
子目录,子目录下有 memory.memsw.xxx
,说明 内存控制组 已管控交换分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 配置 `swapaccount=1` 之前 root@VM-16-11-debian:/sys/fs/cgroup/memory# ls cgroup.clone_children memory.force_empty memory.kmem.tcp.limit_in_bytes memory.move_charge_at_immigrate memory.swappiness tasks cgroup.event_control memory.kmem.failcnt memory.kmem.tcp.max_usage_in_bytes memory.numa_stat memory.usage_in_bytes user.slice cgroup.procs memory.kmem.limit_in_bytes memory.kmem.tcp.usage_in_bytes memory.oom_control memory.use_hierarchy YunJing cgroup.sane_behavior memory.kmem.max_usage_in_bytes memory.kmem.usage_in_bytes memory.pressure_level notify_on_release init.scope memory.kmem.slabinfo memory.limit_in_bytes memory.soft_limit_in_bytes release_agent memory.failcnt memory.kmem.tcp.failcnt memory.max_usage_in_bytes memory.stat system.slice
# 配置 `swapaccount=1` 之后 root@VM-16-11-debian:/sys/fs/cgroup/memory# ls cgroup.clone_children memory.kmem.max_usage_in_bytes memory.max_usage_in_bytes memory.pressure_level system.slice cgroup.event_control memory.kmem.slabinfo memory.memsw.failcnt memory.soft_limit_in_bytes tasks cgroup.procs memory.kmem.tcp.failcnt memory.memsw.limit_in_bytes memory.stat user.slice cgroup.sane_behavior memory.kmem.tcp.limit_in_bytes memory.memsw.max_usage_in_bytes memory.swappiness YunJing memory.failcnt memory.kmem.tcp.max_usage_in_bytes memory.memsw.usage_in_bytes memory.usage_in_bytes memory.force_empty memory.kmem.tcp.usage_in_bytes memory.move_charge_at_immigrate memory.use_hierarchy memory.kmem.failcnt memory.kmem.usage_in_bytes memory.numa_stat notify_on_release memory.kmem.limit_in_bytes memory.limit_in_bytes memory.oom_control release_agent
# 差异点如下,很明显说明新增了对swap的管理 - init.scope + memory.memsw.failcnt + memory.memsw.limit_in_bytes + memory.memsw.max_usage_in_bytes + memory.memsw.usage_in_bytes
|