请帮助找到合适的解决方案。
在Ubuntu环境中运行一个java服务,它定期调用带有params的外部进程(同一程序的多个实例)。所有内容都打包到Docker容器中(内存限制设置,非特权,只读取tmp和日志,cap_drop all)。有时,提供给子进程的数据会使其溢出内存限制。因此,在这种情况下,我们想要因OOM而杀死子进程,但让父(java)进程保持运行。
如果谈到非docker系统,有一组方法可以实现这一点,如:创建自定义cgroup,设置内存限制并将子进程附加到它。另一种方法是调整/ proc / PID / oom_adj设置以使子进程具有更大的oom_score。
但是在docker容器中,我找不到以简单方式执行此操作的方法,无需在特权模式下运行容器并将外部包装器添加到主进程。
是否有本地方法在容器内添加内存cgroup或调整OOM杀手?
提前致谢!
答案 0 :(得分:1)
唯一的方法是使用--oom-score-adj
选项docker run
甚至--oom-kill-disable
。
https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources