2017-02-12 138 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