当前位置:  开发笔记 > 编程语言 > 正文

Docker容器如何判断其内存是否有限?

如何解决《Docker容器如何判断其内存是否有限?》经验,为你挑选了1个好方法。

我在cgget -n --values-only --variable memory.limit_in_bytes /Docker容器中使用,以查看允许使用的内存量docker run --memory=X.但是,我需要知道内存是否有限,上面的命令没有回答,因为在这种情况下它会给我一个很大的数字(9223372036854771712在我的测试中).

那么,有没有办法判断内存是否有限?我正在寻找不涉及docker run以特殊方式运行的解决方案,例如从主机安装文件(例如/var/...)或传递环境变量.



1> Thomasleveil..:

您可以将可用的总物理内存与cgget给出的数字进行比较.如果给定的数字cgget低于总物理内存,那么您肯定知道用于限制内存的cgroup.

例如,如果我在我的计算机上运行一个容器将内存限制为100M,该容器有2G的物理内存,cgget则会104857600free命令报告2098950144字节时报告:

在docker主机上:

# free -b
             total       used       free     shared    buffers     cached
Mem:    2098950144  585707520 1513242624     712704   60579840  367644672
-/+ buffers/cache:  157483008 1941467136
Swap:   3137335296          0 3137335296    

启动容量限制为100M的容器

docker run --rm -it --memory=100M  bash -l

现在在该容器内:

# free -b
             total       used       free     shared    buffers     cached
Mem:    2098950144  585707520 1513242624     712704   60579840  367644672
-/+ buffers/cache:  157483008 1941467136
Swap:   3137335296          0 3137335296    

# cgget -n --values-only --variable memory.limit_in_bytes /
104857600

请注意,该free命令将在docker主机上报告与容器内相同的值.

最后,以下bash脚本定义了一个函数is_memory_limited,该函数可用于测试以检查cgroup是否用于限制内存.

#!/bin/bash
set -eu

function is_memory_limited {
    type free >/dev/null 2>&1 || { echo >&2 "The 'free' command is not installed. Aborting."; exit 1; }
    type cgget >/dev/null 2>&1 || { echo >&2 "The 'cgget' command is not installed. Aborting."; exit 1; }
    type awk >/dev/null 2>&1 || { echo >&2 "The 'awk' command is not installed. Aborting."; exit 1; }

    local -ir PHYSICAL_MEM=$(free -m | awk 'NR==2{print$2}')
    local -ir CGROUP_MEM=$(cgget -n --values-only --variable memory.limit_in_bytes / | awk '{printf "%d", $1/1024/1024 }')

    if (($CGROUP_MEM <= $PHYSICAL_MEM)); then
        return 0
    else
        return 1
    fi
}


if is_memory_limited; then
    echo "memory is limited by cgroup"
else
    echo "memory is NOT limited by cgroup"
fi

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有