请帮助找到合适的解决方案。
有一个在Ubuntu环境中运行的java服务,它周期性地调用带参数的外部进程(同一个程序的多个实例)。一切都被打包到 Docker 容器中(设置了内存限制,非特权,只读,除了 tmp 和日志,cap_drop all)。有时,提供给子进程的数据会使其超出内存限制。因此,在这种情况下,我们希望由于 OOM 而终止子进程,但让父 (java) 进程继续运行。
如果谈到非 docker 系统,有一组方法可以实现这一点,如:创建自定义 cgroup,设置内存限制并为其附加子进程。另一种方法是调整/proc/PID/oom_adj 设置,使子进程具有更大的 oom_score。
但是在 docker 容器中,我找不到一种简单的方法来完成它,而不是以特权模式运行容器并向主进程添加外部包装器。
有没有原生的方式在容器内添加内存cgroup或者调整OOM killer?
提前致谢!
最佳答案
唯一的方法是使用 --oom-score-adj
选项到 docker run
甚至 --oom-kill-disable
.
https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources
关于linux - 为 Docker 容器中的子进程调整 OOM killer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44393107/