本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
作业在没有状态的情况下停留在 RUNNABLE 状态的常见原因原因
如果您没有收到来自事件 CloudWatch 的事件或收到未知原因事件,则以下是导致此问题的一些常见原因。
- 计算资源上未配置
awslogs日志驱动程序 -
AWS Batch 作业将其日志信息发送到 CloudWatch 日志。为了做到这一点,必须将计算资源配置为使用
awslogs日志驱动程序。假设计算资源 AMI 基于 Amazon ECS 优化 AMI(或 Amazon Linux)。然后,该驱动程序默认会注册到ecs-init软件包中。假设现在使用的是不同的基础 AMI。然后,必须验证在启动 Amazon ECS 容器代理时,是否使用ECS_AVAILABLE_LOGGING_DRIVERS环境变量将awslogs日志驱动程序指定为可用的日志驱动程序。有关更多信息,请参阅计算资源 &AMI; 规范和教程:创建计算资源 AMI: - 资源不足
-
如果作业定义指定的 CPU 或内存资源超出可分配的计算资源量,则作业将永远不会被放置。例如,假设作业指定了 4 GiB 的内存,而计算资源少于可用内存。那么,作业就不能放置在这些计算资源上。在这种情况下,必须减少作业定义中指定的内存,或者向环境中添加更大的计算资源。为 Amazon ECS 容器代理和其他关键系统进程保留了部分内存。有关更多信息,请参阅 计算资源内存管理。
- 无法通过互联网访问计算资源
计算资源需要访问才能与 Amazon ECS 服务端点通信。这可以通过接口 VPC 端点或具有公共 IP 地址的计算资源实现。
有关接口 VPC 端点的更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的 Amazon ECS 接口 VPC 端点(AWS PrivateLink)。
如果没有配置接口 VPC 端点,并且计算资源没有公共 IP 地址,则必须使用网络地址转换 (NAT) 来提供这种访问。有关更多信息,请参阅《Amazon VPC 用户指南》中的。有关更多信息,请参阅 创建 VPC。
- 已达到 Amazon EC2 实例限制
-
您的账户可以在中启动的 Amazon EC2 实例数量由您 AWS 区域 的 EC2 实例配额决定。某些实例类型也有基于实例类型的配额。有关账户的 Amazon EC2 实例配额(包括如何请求提高限制)的更多信息,请参阅《Amazon EC2 用户指南》中的 Amazon EC2 服务限制。
- 未安装 Amazon ECS 容器代理
-
必须将 Amazon ECS 容器代理安装在亚马逊机器映像(AMI)上才能使 AWS Batch 运行作业。Amazon ECS 容器代理默认安装在 Amazon ECS 优化 AMI 上。有关 Amazon ECS 容器代理的更多信息,请参阅《Amazon Elastic Container Service 开发人员指南》中的 Amazon ECS 容器代理。
- Long-running 启动模板中的用户数据脚本
-
如果您的启动模板包含需要很长时间才能完成的用户数据脚本,则实例在注册到 Amazon ECS 之前可能会超时。发生这种情况时,这些实例将永远无法接管作业,从而使所有任务都处于
RUNNABLE状态。必须完成所有用户数据脚本,然后实例才能注册到 Amazon ECS 并开始运行作业。要解决此问题,请查看您的启动模板用户数据,了解是否存在长时间运行或阻止的操作。考虑优化脚本以缩短执行时间,异步运行非关键操作,或者将初始化逻辑完全移出用户数据。有关更多信息,请参阅 使用 Amazon EC2 启动模板和 AWS Batch。
如需了解更多信息,请参阅为什么我的 AWS Batch 工作RUNNABLE状态停滞不前?