AWS ECS任务定义中Docker Nginx内存配置及RESOURCE:MEMORY错误修复
修复ECS任务启动的RESOURCE:MEMORY错误
问题根源
t2.micro实例总内存为1GB,ECS优化AMI会预留约54MB给系统和ECS代理组件,因此ECS注册的可用内存显示为970MB。但实际场景中,系统进程、ECS代理本身会占用部分内存,再加上Docker运行时的开销,导致实际可分配给任务的内存可能低于970MB。你的任务定义中设置了memoryReservation: 512(软内存预留),虽看似小于剩余内存,但实际物理内存可能不足以支撑该预留值。
解决方案
1. 降低任务的内存预留值
由于你的Nginx容器实际仅占用4.8MiB内存,完全不需要预留512MB。修改任务定义中的memoryReservation为更小的值,比如128MB或256MB:
"containerDefinitions": [ { // ... 其他配置 "memoryReservation": 128, // ... 其他配置 } ]
重新注册任务定义后,再次运行任务即可。
2. 改用硬内存限制(可选)
如果想更精准控制内存使用,可以设置memory(硬限制)替代memoryReservation,明确指定容器可使用的最大内存:
"containerDefinitions": [ { // ... 其他配置 "memory": 128, // 移除 memoryReservation 配置 // ... 其他配置 } ]
硬限制会让ECS调度器更准确地判断资源是否充足,避免因软预留导致的调度误判。
3. 检查实例实际内存使用
登录到EC2容器实例,执行以下命令查看物理内存使用情况:
free -h docker stats ecs-agent
free -h可以看到系统剩余的物理内存,确认是否有其他进程占用了过多内存。docker stats ecs-agent可以查看ECS代理的内存占用,如果代理占用超过100MB,建议升级到最新的ECS优化AMI版本,新版本的代理内存占用更低。
4. 升级ECS优化AMI(可选)
旧版本的ECS优化AMI可能存在系统组件或ECS代理内存占用过高的问题,替换实例为最新的ECS优化AMI,可以释放更多可用内存给任务。
内容的提问来源于stack exchange,提问作者Inspiraller
相关产品推荐
相关产品推荐

