gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:00:00 24 4
gpt4 key购买 nike

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

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

最佳答案

您可以将可用物理内存总量与cgget 给您的数字进行比较。如果cgget给出的数字低于总物理内存,那么您就可以肯定地知道cgroups在哪里用于限制内存。

例如,如果我在物理内存为 2G 的计算机上运行一个将内存限制为 100M 的容器,cgget 将报告 104857600,而 free 命令报告 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 <any-image-with-cgget-available> 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

关于docker - Docker 容器如何判断其内存是否有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com