linux - Docker 容器中的内存限制和 CPU 限制

标签 linux docker linux-kernel containers cgroups

更新:

在stackoverflow上发现了很多关于这个话题的问题和讨论。尽管它们被标记为已接受并被成千上万的用户启动,但它们似乎不是正确的答案。


我运行了一个 docker(版本 1.13.1,build 092cba3)容器,资源限制如下:

docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -m 4096M --cpuset-cpus='0' --cpus=1 --cpu-shares=256 -p $IMAGE_NAME

主机系统 (RHEL 7) 有 4 个内核和 8G 内存。基本上我想限制容器的可用内存和 CPU。成功启动容器后,我打开 bash 并尝试从容器中查找限制信息。但我无法获得正确的信息。

我试过了:

sudo cat /proc/meminfo

结果是:

主机系统 内存总量:8008812 kB 内存免费:7416404 kB 内存可用:7537332 kB
Docker 容器 内存总量:8008812 kB 内存免费:7318052 kB 内存可用:7498764 kB

同样,我想获得 CPU 限制:

grep -c ^processor /proc/cpuinfo

结果是:

主机系统 4
Docker 镜像 4

容器强制执行的 CPU 和内存限制似乎对容器不可见。我也试过查询cgroup信息。

mkdir -p /tmp/memory
mount -n -t cgroup -o memory cgroup /tmp/memory

然后我查看 cgroup 文件:

[root@engrlab memory]# cat /tmp/memory/memory.limit_in_bytes
9223372036854771712

这个数字大于主机系统的实际内存。

有没有办法验证容器中的资源约束是否正确设置?如何从容器中找到资源约束信息?感谢任何建议。

最佳答案

我在工作的 docker 主机上尝试这个命令

docker run -it -d -m 100M --cpuset-cpus='0' --cpus=1 --cpu-shares=256 --name testing ubuntu /bin/bash

docker stats testing

关于linux - Docker 容器中的内存限制和 CPU 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917377/

相关文章:

Linux,修改文件时间戳与当前时间不同

linux - 获取 tmux 中其他 Pane 的标准输入

docker - 如何在 Elasticsearch docker 镜像上运行 crontab 作业

linux - linux内核中的原子操作是没有 dentry 的吗?

linux-kernel - bpf_printk() 的输出

php - Magento Cron Tab 作业时区

java - 拼出时间

java - 如何使用 docker-java 创建并启动 Docker 容器节点,分离模式

windows - ingensi/play-framework图片重复下载

c - 使用 proc 的内核模块程序