运行Debian11的Linux服务器中 docker run -m 命令 不生效 不能能限制住内存使用 cgroups

问题

  • 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的主机,复现了问题。

debian11屏幕显示

原因应该不会出在代码和部署方式、参数上,因为旧主机运行没问题,新主机配置只增不减,那问题应该在运行环境上。

在新主机上尝试获取Docker中JVM的内存设定,返回如下结果

debian11的jvm内存

可以发现jvm的内存设定并不正确,而且OpenJDK非常友好的提示

Unable to open cgroup memory...

旧平台表现差强人意

debian10的jvm内存

进一步对比docker info结果,

debian11的docker info

debian10的docker info

可以发现Cgroup的设定有一些不同。翻阅官方文档:

https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.zh-cn.html#openstack-cgroups

于是有了题头的设定,然后

update-grub && reboot

再次验证即可通过。

debian11的docker info
debian11的jvm内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值