如何检测 Docker 容器何时达到其配置的内存限制

jua*_*011 6 memory-limit docker

给定一个已启动的具有内存限制的Docker 容器,我想知道是否可以检测到何时强制实施该内存限制,从而使该容器即将崩溃,因为它的内存不足。是否有一些我可以捕获的信号?或者我可以轮询一些日志文件?事后检测到这一点,即使延迟几分钟仍然有用

BMi*_*tch 6

如果 docker 由于内存限制而终止了您的容器,您将看到:

docker inspect --format '{{.State.OOMKilled}}' ${container_id}
Run Code Online (Sandbox Code Playgroud)

设置为 true。

请注意,如果操作系统在容器内运行的进程达到 Docker 内存限制之前将其终止,您将看到的只是应用程序收到的 SIGKILL。


您可以主动监视docker stats容器,看看它是否接近此处其他答案所述的限制。


您可以近乎实时地监控docker events任何因 OOM 而被终止的容器:

docker events --filter type=container --filter event=oom
Run Code Online (Sandbox Code Playgroud)

您可以调整上述事件命令来监视特定容器或受到时间限制。有关可用标志,请参阅文档。


Edm*_*mhs 0

监控此情况的一种方法是使用docker stats命令。即使在强制执行限制之前,您也可以监控容器的使用情况。

https://docs.docker.com/config/containers/runmetrics/#docker-stats

docker stats container1 container2
Run Code Online (Sandbox Code Playgroud)

您也可以执行一些 bash 脚本:

如何从docker stats中找到最大内存?

另一种选择是查看docker events

https://www.systutorials.com/docs/linux/man/1-docker-events/

Docker 容器将报告以下事件:

attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update
Run Code Online (Sandbox Code Playgroud)