2017-02-12 110 views

回答

2

内存限制是通过cgroups强制执行的。因此,您需要使用cgget来查找给定cgroup的内存限制。

为了测试这一点,你可以运行内存限制的容器:

docker run --memory 512m --rm -it ubuntu bash 

运行此您的容器内:

apt-get update 
apt-get install cgroup-bin 
cgget -n --values-only --variable memory.limit_in_bytes/
# will report 536870912 

多克1.13坐骑容器的cgroup中,以/sys/fs/cgroup(这可能改变未来版本)。您可以检查使用限制:感谢

cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
+0

嗯,这似乎不工作。它总是在容器中给我一个巨大的价值(9223372036854771712),我猜是系统中可用的总内存。当我在“集装箱统计数据”外面看到我现在申请的400米限制时,显示出来了。所以仍然困惑如何在容器内获得相同的值。顺便说一下,这是在docker 1.13上运行的centos容器。 – Mandragor

+0

@Mandragor您也可以检查'/ sys/fs/cgroup'。查看我的更新。这也适用于centos。 – Sebastian

+0

cat /sys/fs/cgroup/memory/memory.limit_in_bytes返回9223372036854771712. – Mandragor

1

容器为我工作,您的想法塞巴斯蒂安

#!/bin/sh 
MEM_LIMIT=$(cat /proc/self/cgroup|\ 
awk -F: '{ print $2":"$3}'|\ 
grep ^memory:|\ 
awk -F: '{print "/sys/fs/cgroup/memory"$2"/memory.limit_in_bytes"}' 
) 

MEM=$(cat "$MEM_LIMIT") 

if [[ $MEM < 419430400 ]]; then 
    echo "Memory limit was set too small. Minimum 400m." 
    exit 1 
fi