首页 > 解决方案 > 在 ec2(spot-fleet) 中运行的任务在 ECS AWS 中使用的内存不超过 32GB

问题描述

为什么任务(docker)不使用超过32GBec2,而32GB在 ec2 和任务定义中可用的更多?

我不知道为什么 docker 不使用 more than 32GB,因为我使用 ec2 with 122GB,并且我在任务定义中声明该任务具有122GBRAM。

我执行以下任务:

Task memory (MiB)121000
Task CPU (unit)3900

在 ECS 集群 ec2(spot-fleet) x1e.xlarg 中运行:

Task memory (MiB)122000
Task CPU (unit)4000

但是当我看到docker stats这个任务正在运行时,docker 不使用超过32GB memory.

Spot 队列配置

   amzn2-ami-ecs-gpu-hvm-2.0.20200706-x86_64-ebs [ami-082692cd7634df346]

   User-data

   #!/bin/bash
   echo "ECS_CLUSTER=tor-privoxy" >> /etc/ecs/ecs.config

标签: amazon-web-servicesdockeramazon-ec2amazon-ecs

解决方案


ECS 任务没有这样的内存限制,我建议取消内存限制,以便您的任务Maximum在需要时能够使用底层 EC2 实例的内存。

只需使用memoryReservation参数并memory从任务定义中删除配置。

memoryReservation
Type: integer

Required: no

为容器保留的内存的软限制(以 MiB 为单位)。当系统内存处于争用状态时,Docker 会尝试将容器内存保持在此软限制;但是,您的容器可以在需要时消耗更多内存,最高达到使用内存参数(如果适用)指定的硬限制,或容器实例上的所有可用内存,以先到者为准。此参数映射到MemoryReservatioDocker Remote API 的 Create a container 部分中的 n 和--memory-reservationdocker run 的选项。

容器定义内存

使用此设置启动容器后,您将能够看到 MEM USAGE / LIMIT哪里limit将显示 EC2 实例的最大内存以响应docker stats

在此处输入图像描述


推荐阅读