¿Cómo soluciono los errores OutOfMemory en Amazon Elastic Container Service (Amazon ECS)?

Última actualización: 17-03-2022

Quiero solucionar problemas de uso de memoria en mi tarea de Amazon Elastic Container Service (Amazon Elastic Container Service (Amazon ECS)).

-o bien-

Los contenedores de mi tarea de Amazon Elastic Container Service (Amazon ECS) se están cerrando debido a un error OutOfMemory.

Descripción corta

De forma predeterminada, un contenedor no tiene restricciones de recursos y puede usar tantos recursos como lo permita el programador del kernel del host. Con Docker, puede controlar la cantidad de memoria que utiliza un contenedor. Asegúrese de no permitir que un contenedor en ejecución consuma la mayor parte de la memoria de la máquina host. En los hosts Linux, cuando el kernel detecta que no hay suficiente memoria para realizar funciones importantes del sistema, lanza una excepción OutOfMemory y comienza a finalizar los procesos para liberar memoria.

Con Docker, puede elegir usar una de las siguientes opciones:

  • Límites de memoria dura que permiten que el contenedor no utilice más de una cierta cantidad de memoria de usuario o del sistema.
  • Límites flexibles que permiten que el contenedor use tanta memoria como sea necesario, a menos que se produzcan ciertas condiciones, como poca memoria o contención en la máquina host.

Cuando finaliza una tarea de Amazon Elastic Container Service (Amazon ECS) debido a problemas de OutOfMemory, es posible que reciba el siguiente mensaje de error:

OutOfMemoryError: Container killed due to memory usage

Este error se produce cuando se cierra un contenedor de la tarea porque los procesos del contenedor consumen más memoria que la cantidad que se asignó en la definición de la tarea.

Resolución

Para solucionar los errores OutOfMemory en su tarea de Amazon Elastic Container Service (Amazon ECS), haga lo siguiente:

stats max(MemoryUtilized) as mem, max(MemoryReserved ) as memreserved by bin (5m) as period, TaskId, ContainerName
| sort period desc | filter ContainerName like “example-container-name” | filter TaskId = “example-task-id”

Para mitigar el riesgo de inestabilidad de las tareas debido a problemas de OutOfMemory, haga lo siguiente:

  • Lleve a cabo pruebas para comprender los requisitos de memoria de su aplicación antes de ponerla en producción. Puede realizar una prueba de carga en el contenedor dentro de un host o servidor y, a continuación, comprobar el uso de memoria de los contenedores mediante estadísticas de Docker.
  • Asegúrese de que la aplicación se ejecute solo en hosts con recursos adecuados.
  • Limite la cantidad de memoria que puede usar el contenedor. Puede hacerlo estableciendo valores apropiados para el límite estricto y el límite flexible de sus contenedores. Amazon Elastic Container Service (Amazon ECS) utiliza un par de parámetros para asignar memoria a las tareas: memoryReservation (Reserva de memoria) para el límite flexible y memory (Memoria) para el límite estricto. Cuando especifica estos valores, se restan de los recursos de memoria disponibles para la instancia de contenedor en la que se coloca el contenedor.
    Nota: El parámetro memoryReservation no se admite en contenedores de Windows.
  • Puede activar el intercambio para contenedores con altas demandas de memoria transitoria. Al hacerlo, se reduce la posibilidad de errores de OutOfMemory cuando el contenedor tiene una carga alta.
    Nota: Si utiliza tareas que utilizan el tipo de lanzamiento de AWS Fargate, no se admiten los parámetros maxSwap (Intercambio máximo) y sharedMemorySize (Tamaño de memoria compartida).
    Importante: Configure el intercambio en sus hosts de Docker con cuidado. Activar el intercambio puede ralentizar la aplicación y reducir el rendimiento. Sin embargo, esta característica evita que la aplicación se quede sin memoria de sistema.

How do I troubleshoot issues with containers exiting in my Amazon Elastic Container Service (Amazon ECS) tasks? (¿Cómo puedo solucionar problemas con los contenedores salientes de mis tareas de Amazon Elastic Container Service (Amazon ECS)?)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?