Python subprocess因退出码-9崩溃问题咨询
Docker容器内存硬限制
哪怕EC2实例内存充足,Docker容器本身可能被设置了内存上限。执行docker inspect <容器ID>,查看HostConfig.Memory和HostConfig.MemorySwap字段:如果Memory值不为0,说明容器有内存硬限制,子进程内存超过这个值就会被OOM Killer终止,对应退出码-9。ECS任务定义的资源配置
检查ECS任务定义里的容器资源设置:是否配置了memory(硬限制)或memoryReservation(软限制)?memory是严格上限,超了就触发OOM;memoryReservation是预留内存,当宿主机内存紧张时,仍可能被系统回收。直接去ECS控制台查看任务定义的资源参数即可。宿主机OOM Killer触发
就算容器没设限制,宿主机整体内存不足时,Linux的OOM Killer会挑选内存占用高的进程杀掉。登录EC2宿主机,查看/var/log/messages或执行dmesg命令,搜索Out of memory或killed process,确认是不是你的子进程被选中终止。环境变量缺失引发的资源限制
你用的env只包含部分环境变量,可能漏掉了和进程资源限制相关的配置(比如ulimit参数)。默认的ulimit可能限制了子进程的虚拟内存、进程数等,哪怕实例内存充足,子进程触碰到这些限制也会被终止。可以在子进程里执行ulimit -a,查看当前的资源限制配置。子进程内存泄漏问题
别排除子进程自身的内存泄漏:表面看内存充足,但子进程运行时内存占用异常增长,短时间内超出可用资源。可以用docker stats <容器名>或在容器内执行top命令,实时监控子进程的内存变化,确认是否有泄漏情况。
内容的提问来源于stack exchange,提问作者Allen Ye

