解决对Docker容器内存限制警告或未实际限制的问题

解决对Docker容器内存限制警告或未实际限制的问题

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
a229353897850843206a76458307a37eaeb3c8e1adf0e58e458b9ed10790cfa8

当试图在启动docker容器时使用–memory指令时可能会出现此类警告。

场景

笔者的场景是试图在一个2G内存服务器上加入RabbitMQ,但是内存已所剩无几。为了防止种种问题,需要进行限制。一个想法是在启动容器时使用–memory指令限制其内存大小。但启动成功后笔者收到文章上述警告。

含义

这意味着笔者服务器的Linux 内核当前没有启用对 swap 限制的支持,或者 cgroup 没有正确挂载。而cgroup(Control Group)是 Linux 内核中的一个功能,用于限制、控制和监视进程组的资源使用,如 CPU、内存、磁盘 I/O 等。cgroup 允许系统管理员将一组进程组织在一起,并为它们分配资源。如果你没有正确挂载cgorup,在这种情况下,虽然你指定了 --memory 限制,但无法限制容器的 swap 内存使用。

解决方案

步骤 1:更新 GRUB 配置

  1. 编辑 GRUB 配置文件
sudo nano /etc/default/grub
  1. GRUB_CMDLINE_LINUX_DEFAULT 行中添加 cgroup_enable=memory swapaccount=1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"

这行将引导加载程序的默认内核命令行参数,以下是具体参数释义:

quiet: 启动时禁用大多数内核启动信息的显示,使启动过程更加简洁。

splash: 启用启动时显示图形启动画面(Splash Screen),通常用于显示启动时的厂商标志或进度条。

cgroup_enable=memory: 启用内核的 cgroup 内存子系统,允许使用 cgroup 来管理和限制内存资源。

swapaccount=1: 启用 swap 账户统计。这个参数使 cgroup 能够跟踪和管理交换空间(swap)的使用情况。

  1. 保存并退出编辑器

步骤 2:更新 GRUB 并重启

  1. 更新 GRUB 配置

    sudo update-grub
    
  2. 重启系统

    sudo reboot
    

验证

通过以下命令检验容器是否真的将memory进行了限制。比如,验证RabbitMQ的内存是否被限制在350mb以内:

sudo docker stats rabbitmq

得到如下输出结果:

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O      BLOCK I/O        PIDS
7e38b33cd7f7   rabbitmq   0.16%     135.3MiB / 350MiB   67.65%    1.2kB / 0B   56.9MB / 598kB   29

可以发现在limit一列中,的确将RabbitMQ的内存限制在350mb以内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值