我在一台机器上运行了多个docker进程,我想监视它们并在它通过某个内存阈值后重启docker进程。 我可以让docker在达到内存阈值时重启它的进程吗? 我的选择是什么?
由于
亚历
答案 0 :(得分:6)
您可以创建一个shell脚本来监视资源使用情况,并在达到内存限制时重新启动Docker守护程序,但我认为这实际上并不是一个好方法。
使用此命令可以查看按内存使用情况排序的容器。找出哪个容器使用了太多内存并尝试找到原因,因为发生了这种情况。
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h
此外,如果容器的内存消耗正常,但您想限制它,则可以限制分配给每个容器的资源。您可以使用--memory
中的docker run
选项执行此操作。
有关内存限制的详细信息,请在Docker文档中查看此信息:https://docs.docker.com/engine/admin/resource_constraints/
希望这会有所帮助,祝你好运。
编辑:回答您的回复,如果您的容器内存不足,它将被内核自动杀死。您可以使用选项--memory
配置内存限制,并将重启策略设置为--restart=always
。这样,您的容器将由OOM(内存不足)错误自动终止,但它将重新启动,因为它的重启策略是在任何错误后继续重新启动。
答案 1 :(得分:2)
永远记住,如果你不设置--memory-swap,容器将不会在--memory value limit重启,因为Docker在达到--memory limit后会使用Swap,所以,如果你想在--memory value limit重启--memory 值,您需要将 --memory-swap 设置为与 --memory limit 相同的值。
docker run --memory 50m --memory-swap 50m --rm -it progrium/stress --vm 1 --vm-bytes 62914560 --timeout 1s