我在一台机器上运行了多个docker进程,我想监控它们,一旦超过一定的内存阈值就重新启动docker进程。我可以让docker在达到内存阈值时重新启动它的进程吗?我有什么选择?
谢谢
亚历克斯
发布于 2017-06-21 15:58:31
您可以创建一个shell脚本来监视资源使用情况,并在它达到内存限制时重新启动Docker守护进程,但我认为这实际上不是一个好方法。
使用此命令,您可以查看按内存使用情况排序的容器。找出哪个容器使用了太多内存,并尝试找出原因,因为发生了这种情况。
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h
此外,如果容器的内存消耗是正常的,但您希望限制它,则可以限制分配给每个容器的资源。您可以使用docker run
中的--memory
选项来完成此操作。
有关内存限制的更多信息,请在Docker文档中查看此信息:https://docs.docker.com/engine/admin/resource_constraints/
希望这能帮上忙,祝你好运。
编辑:回答你的响应,如果你的容器内存用完了,它会被内核自动杀死。您可以使用选项--memory
配置内存限制,并将重新启动策略设置为--restart=always
。这样,您的容器将被OOM (out-of-memory,内存不足)错误自动终止,但它将被重启,因为它的重启策略是在出现错误后继续重启。
发布于 2021-04-07 02:28:18
请始终记住,如果您不设置--memory- Swap,容器将不会在--memory value limit处重新启动,因为Docker将在reach --memory limit之后使用swap,所以,如果您想在--memory value处重新启动,您需要设置与--memory limit相同的值--memory-swap。
docker run --memory 50m --memory-swap 50m --rm -it progrium/stress --vm 1 --vm-bytes 62914560 --timeout 1s
https://stackoverflow.com/questions/44669568
复制相似问题