docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker容器内存限制警告或未实际限制问题

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

作者:organwalk

这篇文章主要介绍了如何解决对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"

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

  1. 保存并退出编辑器

步骤 2:更新 GRUB 并重启

sudo update-grub
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以内。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文