Mis aplicaciones alojadas en Amazon Elastic Container Service (Amazon ECS) tienen tiempos de respuesta lentos.
Resolución
Identificación de los motivos de los tiempos de respuesta lentos
Revisa los eventos del servicio Amazon ECS para determinar los motivos por los que se detuvieron las tareas.
Restricciones de recursos
Es posible que recibas uno de los siguientes mensajes de error en los registros de la aplicación:
- Problemas con la CPU: Thread starvation, clock leap o execution timeouts
- Problemas de memoria: OutOfMemoryError o GC overhead limit exceeded
Cuando la aplicación tiene un problema con los recursos, es posible que el contenedor se detenga. Las operaciones en curso se descartan antes de que finalicen. Los datos se pierden y las respuestas a las solicitudes fallan.
Para resolver problemas relacionados con las restricciones de recursos, sigue estos pasos:
- Abre la consola de Amazon ECS.
- En el panel de navegación, selecciona Definiciones de tareas.
- Elige Crear una nueva definición de tarea.
- En la sección Detalles del contenedor, define los recursos para tu carga de trabajo.
Nota: Para obtener más información, consulta ¿Qué debo saber sobre la asignación de CPU en Amazon ECS?
- Elige los tipos de instancias de contenedor de Amazon Elastic Compute Cloud (Amazon EC2) para asignar los recursos.
- Optimiza los tiempos de inicio de tus tareas.
Para obtener más información sobre el uso de la CPU y la memoria, consulta Uso de CPU y memoria por servicio.
Problemas de E/S y redes
Es posible que recibas uno de los siguientes mensajes de error debido a errores de conexión o tiempos de espera:
- Tiempos de espera y reintentos de conexión: SocketTimeoutException: connect timed out
- Fallos de resolución de DNS: Could not resolve host: api.example.com
- Errores de red inaccesible: Network is unreachable (Host : 'database.example.com'. Port: 5432)
- Errores de conexión rechazada: java.net.ConnectException: Connection refused (Connection refused)
- Errores de SSL/TLS: SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Para solucionar los problemas de E/S y redes, haz lo siguiente:
Errores de base de datos
En caso de problemas con la base de datos, es posible que recibas uno de los siguientes mensajes de error en los registros de la aplicación:
- Agotamiento del grupo de conexiones: java.sql.SQLException: Too many connections
- Tiempos de espera de consulta: ERROR: canceling statement due to statement timeout
- Interbloqueos: Deadlock found when trying to get lock; try restarting transaction
- Problemas de conexión: Cannot connect to MySQL server on '*' (111)
Para resolver los problemas de las bases de datos, optimiza las consultas a las bases de datos y, a continuación, reconstruye el índice.
Supervisión de las métricas y comprobaciones de estado del equilibrador de carga
Utiliza Amazon CloudWatch para supervisar las métricas sobre los equilibradores de carga y los destinos.
Revisión de las respuestas de la aplicación
Es posible que recibas uno de los siguientes códigos de estado 5xx:
- HTTP 500 Internal Server Error
- HTTP 502 Bad Gateway
- HTTP 504 Gateway Timeout
Para resolver estos problemas, consulta Errores comunes.
Revisión de los registros de la aplicación para ver si hay mensajes de error
Utiliza CloudWatch para revisar los registros de Amazon ECS en busca de errores como Connection timeout, Database query exceeded time limit o Memory limit exceeded. Para identificar errores y analizar los cuellos de botella y los tiempos de respuesta, utiliza los datos de seguimiento de las aplicaciones.
Optimización del rendimiento
Utiliza los siguientes métodos para mejorar el rendimiento de las aplicaciones alojadas en Amazon ECS.
Almacenamiento en caché de los datos
Usa un sistema de almacenamiento en caché para transferir los datos rápidamente. Algunos ejemplos de sistemas de almacenamiento en caché que puedes usar son Redis, Memcached o Amazon CloudFront.
Si usas el tipo de inicio de EC2, configura ECS_IMAGE_PULL_BEHAVIOR: prefer-cached como comportamiento de extracción del agente de contenedor de Amazon ECS. Para obtener más información, consulta Optimización del tiempo de inicio de las tareas de Amazon ECS.
Uso de Application Auto Scaling
Utiliza Application Auto Scaling para modificar el recuento de tareas en función de la demanda. A continuación, configura las políticas de escalamiento.
Para obtener más información, consulta ¿Qué es Amazon EC2 Auto Scaling?
Optimización de las imágenes de los contenedores
Utiliza compilaciones de varias etapas para reducir el tamaño de la imagen y almacenar en caché las capas de imágenes. Para obtener más información, consulta Comportamiento de extracción de imágenes de contenedores de Linux en Fargate para Amazon ECS.
Implementación de registros y monitores eficientes
Utiliza la API LogConfiguration para establecer los niveles de registro y, a continuación, utiliza AWS X-Ray para implementar el seguimiento distribuido.
Información relacionada
Mensajes de eventos del servicio Amazon ECS
Métricas de CloudWatch para el equilibrador de carga de aplicación
Registros de contenedores centralizados con Amazon ECS y Registros de Amazon CloudWatch
¿Cómo puedo configurar el escalamiento automático de servicios de Amazon ECS en Fargate?