AWS Fargate部署Docker容器conda运行Python脚本被Killed问题
问题排查方向
- 优先排查OOM(内存不足)触发系统主动杀进程场景:Linux环境下
Killed报错是系统OOM Killer机制的典型标识,当进程占用内存超过系统分配上限时,会被系统优先强制终止。你遇到的每次报错进程ID、临时文件名不同,且Fargate每2-3分钟自动重试,完全符合内存超限进程被杀、服务自动重启的特征。 - 其次排查Dockerfile多阶段构建合理性:当前Dockerfile写了3个
FROM语句,多阶段构建默认仅保留最后一个FROM(continuumio/miniconda3)的内容,前面两个阶段安装的gcc、gdal等依赖完全未被带入最终镜像,可确认是否是运行时依赖缺失导致进程异常崩溃,该排查方向优先级低于OOM排查。 - 再排查Fargate任务资源配置:默认低配置(如你此前使用的256 CPU/512 MB内存)不足以支撑集成conda、gdal、flask的Python服务运行,尤其是涉及空间数据、批量计算的服务内存占用较高,极易触达资源上限。
- 最后排查应用内存泄漏问题:若资源扩容后仍出现进程被杀报错,再检查
server.py代码是否存在大对象未释放、缓存无限制增长等内存泄漏问题。
解决方案
经实际排查确认该问题为Fargate任务分配内存不足导致,扩容容器资源配置即可解决,操作步骤如下:
- 注销现有低配置任务定义:
aws ecs deregister-task-definition --task-definition ecs_name:ID
- 修改任务定义配置文件,将原有CPU 256、内存512的配置调整为更高规格,示例配置如下:
{ "family": "fam_name", "cpu": "1024", "memory": "4096", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" // 其余原有配置保持不变 ] }
修改完成后执行命令注册新任务定义:
aws ecs register-task-definition --cli-input-json file://~/environment/aws-cli/task-definition.json
- 更新ECS服务,使其使用新的任务定义运行:
aws ecs update-service --cluster name-Cluster --service name-Service --task-definition ecs_name:ID
操作完成后服务即可正常运行。
内容的提问来源于stack exchange,提问作者Hamish Robertson
相关产品推荐
相关产品推荐

