Reserva de la memoria de instancias de contenedor de Linux de Amazon ECS - Amazon Elastic Container Service

Reserva de la memoria de instancias de contenedor de Linux de Amazon ECS

Cuando el agente de contenedor de Amazon ECS registra una instancia de contenedor en un clúster, el agente debe determinar la cantidad de memoria disponible que puede reservar la instancia de contenedor para las tareas. Debido a la sobrecarga de memoria de la plataforma y a la memoria ocupada por el kernel del sistema, este número difiere de la cantidad de memoria instalada que se anuncia para las instancias de Amazon EC2. Por ejemplo, una instancia m4.large tiene 8 GiB de memoria instalada. Sin embargo, esto no siempre significa que haya exactamente 8192 MiB de memoria disponible para las tareas cuando se registra la instancia de contenedor.

El agente de contenedor de Amazon ECS proporciona una variable de configuración con el nombre ECS_RESERVED_MEMORY, que se puede utilizar para quitar un número concreto de MiB de memoria del grupo asignado a las tareas. Este es un mecanismo eficaz que permite reservar memoria para los procesos críticos del sistema.

Si se ocupa toda la memoria de una instancia de contenedor con las tareas, es posible que las tareas compitan con los procesos críticos del sistema por la memoria y posiblemente inicien un error del sistema.

Por ejemplo, si se especifica ECS_RESERVED_MEMORY=256 en el archivo de configuración del agente, el agente registrará la memoria total menos 256 MiB de esa instancia y las tareas de ECS no podrán asignar 256 MiB de memoria. Para obtener más información sobre las variables de configuración del agente y cómo definirlas, consulte Configuración del agente de contenedor de Amazon ECS y Arranque de instancias de contenedor de Linux de Amazon ECS para la transferencia de datos.

Si especifica 8192 MiB para la tarea y ninguna de las instancias de contenedor tiene 8192 MiB o más de memoria disponible para satisfacer este requisito, la tarea no se puede ubicar en el clúster. Si utiliza un entorno informático administrado, AWS Batch debe iniciar un tipo de instancia de mayor tamaño para poder acomodar la solicitud.

También debe reservar algo de memoria para el agente de contenedor de Amazon ECS y otros procesos críticos del sistema en las instancias de contenedor, de modo que los contenedores de tareas no compitan por la misma memoria y pueda iniciarse un error del sistema.

El agente de contenedor de Amazon ECS utiliza la función ReadMemInfo() de Docker para consultar la memoria total disponible al sistema operativo. Tanto Linux como Windows cuentan con utilidades de línea de comandos para determinar la memoria total.

ejemplo - Determinar la memoria total en Linux

El comando free devuelve la memoria total reconocida por el sistema operativo.

$ free -b

Ejemplo de la salida de una instancia m4.large que ejecuta la AMI de Amazon Linux optimizada para Amazon ECS.

total used free shared buffers cached Mem: 8373026816 348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296

Esta instancia tiene 8 373 026 816 bytes de memoria total, lo que se traduce en 7 985 MiB disponibles para tareas.

ejemplo - Determinar la memoria total en Windows

El comando wmic devuelve la memoria total reconocida por el sistema operativo.

C:\> wmic ComputerSystem get TotalPhysicalMemory

Ejemplo de la salida de una instancia m4.large que ejecuta la AMI de Windows Server optimizada para Amazon ECS.

TotalPhysicalMemory 8589524992

Esta instancia tiene 8 589 524 992 bytes de memoria total, lo que se traduce en 8 191 MiB disponibles para tareas.

Visualización de la memoria de instancias de contenedor

Puede consultar la cantidad de memoria que registra una instancia de contenedor a través de la consola de Amazon ECS (o mediante la operación de la API DescribeContainerInstances). Si, para intentar maximizar el uso de recursos, proporciona la mayor cantidad de memoria posible a las tareas para un determinado tipo de instancia, puede observar la memoria disponible para esa instancia de contenedor y, a continuación, asignar a las tareas esa cantidad de memoria.

Visualización de la memoria de la instancia de contenedor
  1. Abra la consola en https://console.aws.amazon.com/ecs/v2.

  2. En el panel de navegación, seleccione Clústeres y elija el clúster que aloja su instancia de contenedor.

  3. Elija Infraestructura y, a continuación, en Instancias de contenedor, elija una instancia de contenedor.

  4. En la sección Recursos, se muestra la memoria registrada y la memoria disponible para la instancia de contenedor.

    El valor del campo Registrada corresponde a la memoria que la instancia de contenedor registró en Amazon ECS cuando se inició por primera vez, mientras que el valor del campo Disponible corresponde a la memoria que aún no se ha asignado a ninguna tarea.