能够超过docker-compose mem_limit



我正在尝试限制我的容器,以免占主机上的所有RAM。从Docker文档中,我了解--memory限制了RAM和--memory-swap限制(RAM 交换)。从Docker-Compose文档中,看起来像mem_limitmemswap_limit的术语,因此我已经构造了以下Docker-Compose文件:

> cat docker-compose.yml
version: "2"
services:
    stress:
        image: progrium/stress
        command: '-m 1 --vm-bytes 15G --vm-hang 0 --timeout 10s'
        mem_limit: 1g
        memswap_limit: 2g

Progrium/Rescorm图像仅运行stress,在这种情况下,它会产生一个线程,该线程请求15GB RAM并保留10秒。

我希望这会崩溃,因为15> 2。(如果我要求的RAM超过主机的话,确实会崩溃。)

内核具有启用CGroups,docker stats显示限制已被识别:

> docker stats
CONTAINER       CPU %     MEM USAGE / LIMIT     MEM %       NET I/O       BLOCK I/O       PIDS
7624a9605c70    0.00%     1024MiB / 1GiB        99.99%      396B / 0B     172kB / 0B      2

那是怎么回事?我实际上如何限制容器?

更新:观看free,看来RAM的使用实际上是有限的(仅使用1GB RAM),但交换不是:尽管所有交换和stress崩溃,该容器将逐渐增加交换用法,直到食用它(大约需要20秒)通过我的机器上的5GB交换)。

更新2:设置mem_swappiness: 0在请求内存时立即发生崩溃,而与mem_limit相比,无论memswap_limit如何。

运行docker info显示WARNING: No swap limit support

根据https://docs.docker.com/engine/installation/linux/linux/linux-postinstall/#your-kernel-kernel-does-not-support-support-cgroup-swap-swap-limit-capabilities,这是默认的(默认情况下(内存和交换核算的费用约为可用内存总数的1%的开销,总体性能下降10%。")您可以通过编辑/etc/default/grub文件来启用它:

添加或编辑GRUB_CMDLINE_LINUX行以添加以下两个键值对: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"然后使用update-grub更新grub并重新启动。

相关内容

  • 没有找到相关文章

最新更新