You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECS任务启动失败无日志 多次PENDING转STOPPED后才运行如何排查

AWS ECS 任务启动异常排查与配置方案

问题现象

  • 服务部署在g4dn.xlarge实例,使用的Docker镜像大小约10GB
  • 任务启动后3-4分钟直接从PENDING状态切换为STOPPED,无业务日志输出
  • 经过数次重试后任务可正常启动,状态直接从PENDING转为RUNNING
  • 已尝试调整部分ECS Agent超时参数,但问题未解决

任务状态异常截图

一、故障排查步骤

  • 验证ECS Agent配置生效状态
    登录异常实例,执行cat /etc/ecs/ecs.config确认写入的超时参数存在。当前配置仅做了参数追加,没有重启ECS Agent,配置不会加载,这是参数修改后不生效的最常见原因。确认配置存在后执行sudo systemctl restart ecs重启Agent,再执行curl -s http://localhost:51678/v1/metadata确认Agent正常运行。
  • 查看ECS Agent debug日志
    开启debug日志级别后,直接查看实例上的/var/log/ecs/ecs-agent.log,定位任务失败时间点的日志,搜索pull、timeout、stopped、error关键词,日志会明确记录失败原因:是镜像拉取超时、磁盘空间不足、ENI挂载失败还是Docker daemon响应超时。
  • 检查实例基础资源与网络
    • 执行df -h确认磁盘剩余空间:10GB镜像拉取+分层解压需要至少2-3倍镜像大小的临时空间,也就是至少25GB空闲空间,根分区存储空间不足会直接中断拉取流程,且不会输出业务容器日志
    • 执行docker system df检查Docker存储占用,清理悬空镜像释放空间
    • 验证镜像拉取网络连通性:如果走公网拉取确认实例公网连通性、NAT网关带宽无瓶颈;如果走VPC Endpoint拉取ECR镜像,确认安全组放通对应Endpoint的443端口,网络丢包或带宽不足会导致拉取停滞触发超时
  • 查看任务停止原因字段
    在ECS控制台选中已停止的异常任务,进入详情页查看最下方的停止原因字段,该字段会直接返回ECS层面的失败原因,比如镜像拉取重试次数耗尽、资源不足等,不需要登录实例就能拿到核心报错信息。
  • 匹配镜像拉取行为特征
    配置了ECS_IMAGE_PULL_BEHAVIOR=prefer-cached的前提下,新启动的实例本地无任何镜像缓存,第一次启动需要全量拉取10GB镜像;多次重试后启动成功,本质是前几次失败的拉取已经把大部分镜像层缓存到了实例本地,最后一次拉取仅需拉取缺失的分层,耗时大幅降低所以能成功,这个特征和镜像拉取超时的故障表现完全一致。

二、全链路超时阈值配置方案

之前的配置遗漏了控制镜像拉取总时长的核心参数,导致调整其他参数后依然触发默认超时。正确的UserData配置如下,覆盖镜像拉取、容器创建、容器启动全流程的超时设置,配置写入后必须重启ECS Agent才会生效:

autoScalingGroup.addUserData(...[
    `cat >> /etc/ecs/ecs.config << 'EOF'`,
    `ECS_CONTAINER_START_TIMEOUT=15m`,
    `ECS_CONTAINER_CREATE_TIMEOUT=15m`,
    `ECS_IMAGE_PULL_TIMEOUT=15m`,
    `ECS_IMAGE_PULL_INACTIVITY_TIMEOUT=10m`,
    `ECS_LOGLEVEL=debug`,
    `ECS_IMAGE_PULL_BEHAVIOR=prefer-cached`,
    `EOF`,
    // 重启ECS Agent加载新配置
    `systemctl restart ecs`,
    `sleep 10`
])

关键参数说明

  • ECS_IMAGE_PULL_TIMEOUT:镜像拉取总流程超时时间,默认值仅为5分钟,是之前遗漏的核心参数,10GB镜像拉取+解压建议设置为15分钟
  • ECS_IMAGE_PULL_INACTIVITY_TIMEOUT:镜像拉取过程中无数据传输的超时时间,默认1分钟,网络波动时很容易触发,建议设置为10分钟
  • ECS_CONTAINER_START_TIMEOUT/ECS_CONTAINER_CREATE_TIMEOUT:容器创建、启动阶段的超时时间,和镜像拉取阶段独立,设置为15分钟即可覆盖大镜像的启动耗时

额外优化建议

  • 镜像瘦身:10GB镜像体积过大,建议优化Dockerfile,把不常变动的系统依赖、模型文件等分层前置,减少每次部署需要拉取的分层大小,最好将镜像体积控制在2GB以内
  • 预烘焙镜像:针对固定机型的Auto Scaling组,可以构建预安装了业务镜像的自定义AMI,实例启动后直接使用本地缓存镜像启动容器,从根源消除拉取耗时
  • 内网拉取:配置ECR、S3的VPC Endpoint,走AWS内网拉取镜像,内网带宽可达10Gbps以上,10GB镜像拉取耗时可压缩到1分钟以内,避免公网/NAT带宽瓶颈
  • 服务配置匹配:将ECS服务的健康检查宽限期调整为和超时时间一致,避免容器还在拉取镜像阶段就被健康检查判定失败终止任务

内容的提问来源于stack exchange,提问作者rishabhjainps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:09:30