在Docker容器

时间:2017-06-06 14:43:54

标签: linux docker out-of-memory cgroups

请帮助找到合适的解决方案。

在Ubuntu环境中运行一个java服务,它定期调用带有params的外部进程(同一程序的多个实例)。所有内容都打包到Docker容器中(内存限制设置,非特权,只读取tmp和日志,cap_drop all)。有时,提供给子进程的数据会使其溢出内存限制。因此,在这种情况下,我们想要因OOM而杀死子进程,但让父(java)进程保持运行。

如果谈到非docker系统,有一组方法可以实现这一点,如:创建自定义cgroup,设置内存限制并将子进程附加到它。另一种方法是调整/ proc / PID / oom_adj设置以使子进程具有更大的oom_score。

但是在docker容器中,我找不到以简单方式执行此操作的方法,无需在特权模式下运行容器并将外部包装器添加到主进程。

是否有本地方法在容器内添加内存cgroup或调整OOM杀手?

提前致谢!

1 个答案:

答案 0 :(得分:1)

唯一的方法是使用--oom-score-adj选项docker run甚至--oom-kill-disable

https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources