linux - 为 Docker 容器中的子进程调整 OOM killer

标签 linux docker out-of-memory cgroups

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

有一个在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/

相关文章:

r - linux centos 中的 R 基础包 grDevices 中缺少 cairo.so

python - Flask 应用程序的 Docker 多阶段构建

windows - 建立外部连接以在 Windows 上的 docker 镜像上安装 git 时出错

docker - 将docker命令结果存储在Makefile中的变量中

c# - 列表中的 OutOfMemoryException

android - Android 位图出现奇怪的 OutOfMemoryError : Why does showing and then hiding the containing View avoid it?

linux - 比 tee 更好的输出到控制台和输出文件的方法?

c++ - 在 switch 语句中使用运算符关键字

linux - 为什么我的 perl 系统命令不起作用?

java - 由于 : java. lang.OutOfMemoryError: PermGen 空间,Tomcat6 经常挂起