Docker OOM时如何配置守护进程终止整个容器而非杀死随机进程
解决方法
你可以通过Docker原生配置项实现OOM时直接终止整个容器的需求,无需修改应用代码。
1. 推荐配置(Docker 20.10+ 支持)
直接在docker-compose.yml对应服务下添加oom_kill_all: true配置即可,完整示例如下:
version: '3.x' # 适配你当前使用的compose版本即可 services: 你的Python服务名: # 保留原有配置 mem_limit: 200m memswap_limit: 200m # 新增如下配置 oom_kill_all: true # 可搭配重启策略实现故障自动恢复 restart: on-failure
配置说明
开启该参数后,容器触发内存上限时,内核会直接杀死容器内所有进程,容器直接进入退出状态,不会出现仅杀单个进程的半异常状态。
2. 旧版本Docker兼容方案
如果你使用的Docker版本低于20.10,不支持oom_kill_all参数,可以通过调整PID1进程的OOM优先级实现同等效果:
services: 你的Python服务名: mem_limit: 200m memswap_limit: 200m oom_score_adj: 1000
原理说明
oom_score_adj取值范围为-1000~1000,值越高OOM时被优先杀死的概率越高,设为1000后,容器的PID1进程会被OOM Killer优先杀死,PID1进程退出后整个容器会自动终止,内部所有子进程也会被清理。
内容的提问来源于stack exchange,提问作者techtech
相关产品推荐
相关产品推荐

