在使用mem_limit太低的docker容器发生崩溃后,如何在容器中检查 容器中的mem_limit?我想在启动时打印错误消息,如果mem_limit设置为低,则退出。
答案 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
从容器内部恢复内存限制。