检查docker容器中的mem_limit

时间:2017-02-12 11:35:41

标签: docker docker-compose

在使用mem_limit太低的docker容器发生崩溃后,如何在容器中检查 容器中的mem_limit?我想在启动时打印错误消息,如果mem_limit设置为低,则退出。

4 个答案:

答案 0 :(得分:6)

通过cgroup强制执行内存限制。因此,您需要使用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

Docker 1.13将容器的cgroup安装到/sys/fs/cgroup(这可能会在以后的版本中更改)。您可以使用以下方法检查限制:

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

答案 1 :(得分:4)

在容器中为我工作,感谢Sebastian的想法

#!/bin/sh
function memory_limit
{
  awk -F: '/^[0-9]+:memory:/ {
    filepath="/sys/fs/cgroup/memory"$3"/memory.limit_in_bytes";
    getline line < filepath;
    print line
  }' /proc/self/cgroup
}

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

答案 2 :(得分:0)

在主机上,您可以运行Sub SaveToLocations() ' Saves active file to current plus two other backup locations, appends system date and time in front of file name in backup locations. Dim datim As String datim = Format(CStr(Now), "yyyy_mm_dd_hh_mm_ss_") ActiveWorkbook.SaveCopyAs "I:\FilesBackup\" & datim & ActiveWorkbook.Name ActiveWorkbook.SaveCopyAs "E:\CS Docs\FilesBackupCS\" & datim & ActiveWorkbook.Name ActiveWorkbook.Save End Sub 来获得[^+$]*$类似于正在运行的容器的监视器。输出如下:

docker stats

这就是我发现top没有获得4G内存的原因,因为Docker被配置为限制为2G内存。 (在上面的示例中,此问题已得到纠正。)没有那个现场,我完全迷失了为什么我的过程以简单的“ $ docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 729e4e0db0a9 dev 0.30% 2.876GiB / 3.855GiB 74.63% 25.3MB / 4.23MB 287kB / 16.4kB 77 ”结尾。

答案 3 :(得分:0)

以前 /sys/fs/cgroup/memory/memory.limit_in_bytes 对我有用,但在我的内核中使用 5.8.0-53-generic 的 ubuntu 似乎现在正确的端点是 /sys/fs/cgroup/memory.max 从容器内部恢复内存限制。