问题
docker run -m
无法对容器进行内存限制docker
发生Memory cgroup out of memory
如果懒得看过程,直接看答案然后离开吧
修改/etc/default/grub
,添加类似于下面的字段
GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false"
过程
问题发生在我将服务由一台4核16G Debian10
的服务器迁移到另外一台12核32G Debian11
的主机上,显示器直接曝出了
...
Memory cgroup out of memory
...
同时docker stats
显示服务容器正在不断的重启(重启和--restart=always
参数有关)
然后,我用虚拟机做了2核2G
的主机,复现了问题。
原因应该不会出在代码和部署方式、参数上,因为旧主机运行没问题,新主机配置只增不减,那问题应该在运行环境上。
在新主机上尝试获取Docker中JVM的内存设定,返回如下结果
可以发现jvm的内存设定并不正确,而且OpenJDK非常友好的提示
Unable to open cgroup memory...
旧平台表现差强人意
进一步对比docker info
结果,
可以发现Cgroup
的设定有一些不同。翻阅官方文档:
https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.zh-cn.html#openstack-cgroups
于是有了题头的设定,然后
update-grub && reboot
再次验证即可通过。