【发布时间】:2017-11-07 15:40:54
【问题描述】:
请帮助找到合适的解决方案。
在 Ubuntu 环境中运行有一个 java 服务,它定期调用带有参数的外部进程(同一程序的多个实例)。一切都打包到 Docker 容器中(设置了内存限制,非特权,只读,除了 tmp 和日志,cap_drop 全部)。有时,提供给子进程的数据会使它超出内存限制。因此,在这种情况下,我们希望由于 OOM 而杀死子进程,但让父 (java) 进程继续运行。
如果谈到非 docker 系统,有一套方法可以实现这一点,例如:创建自定义 cgroup,设置内存限制并将子进程附加到它。另一种方法是调整 /proc/PID/oom_adj 设置以使子进程具有更大的 oom_score。
但在 docker 容器中,我找不到一种简单的方法,无需以特权模式运行容器并将外部包装器添加到主进程。
有没有本地方法可以在容器内添加内存 cgroup 或调整 OOM 杀手?
提前致谢!
【问题讨论】:
标签: linux docker out-of-memory cgroups