找回密码
 立即注册
快捷导航

[Docker/K8s] 限制Docker容器占用的内存大小 --memory

[复制链接]
新人 2023-7-20 14:03:41 | 显示全部楼层

限制Docker容器占用的内存大小

启动Docker容器时,若没有设置memory和memory-swap选项,则该容器可以使用主机的所有内存,没有限制。

查看容器占用内存大小:

docker stats [<container id/name>]

启动容器时命令中加入 --memory 500m 选项即可:

docker run -d --name <containerName> -p 8000:80 --memory 512m nginx

--memory 可以简写成 -m

限制已启动容器的内存

docker update --m 512m <container id/name>

如果这个更新命令报错:

Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time

则需要设置--memory-swap:

docker update --memory=512m --memory-swap -1 <container id/name>

报错解读:

--memory-swap 限制内存和 Swap 的总和,不设置的话默认为--memory的两倍
docker 默认没有启用memory-swap交换内存,直接设置了内存会出问题,也就是说宿主 swap 支持使用多少则容器即可使用多少,如果 --memory-swap 设置小于 --memory则设置不生效。

注意:设置 --memory-swap前,看下你的服务器是否分配了swap虚拟内存,没分配同样会报错;

将 memory-swap 设置值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制。

  • 如果只指定了 --memory 则 --memory-swap 默认为 --memory 的两倍
  • 如果 --memory-swap 和 --memory 设置了相同值,则表示不使用 Swap
  • 如果设置了 --memory-swap 参数,则必须设置 --memory 参数
  • 后期 update --memory 时数值不能超过 --memory-swap 的值,否则会报错 Memory limit should be smaller than already set memoryswap limit

查询是否配置成功:docker inspect containerId


另一个报错场景

Your kernel does not support swap limit capabilities or the cgroup is not mounted

解决:

// 1 打开/etc/default/grub文件
sudo vi /etc/default/grub
// 2 加入下面配置
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
// 3 更新grub系统
sudo update-grub
// 4 重启
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-23 00:42

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表