Minhas aplicações hospedadas no Amazon Elastic Container Service (Amazon ECS) apresentam tempos de resposta lentos.
Resolução
Identifique os motivos dos tempos de resposta lentos
Analise os eventos de serviço do Amazon ECS para identificar os motivos da interrupção de tarefas.
Restrições de recursos
É possível receber uma das seguintes mensagens de erro nos logs da aplicação:
- Problemas de CPU: Thread starvation, clock leap ou execution timeouts
- Problemas de memória: OutOfMemoryError ou GC overhead limit exceeded
Quando a aplicação enfrenta um problema com recursos, o contêiner pode parar. As operações em andamento são descartadas antes de serem concluídas. Os dados são perdidos e as respostas às solicitações apresentam falhas.
Para resolver problemas com restrições de recursos, conclua as seguintes etapas:
- Abra o console do Amazon ECS.
- No painel de navegação, clique em Definições de tarefa.
- Selecione Criar uma nova definição de tarefa.
- Na seção Detalhes do contêiner, defina os recursos do seu workload.
Observação: para obter mais informações, consulte O que preciso saber sobre a alocação de CPU no Amazon ECS?
- Escolha os tipos de instância de contêiner do Amazon Elastic Compute Cloud (Amazon EC2) para alocar recursos.
- Otimize os tempos de inicialização das suas tarefas.
Para obter mais informações sobre a utilização de CPU e da memória, consulte Utilização de CPU e memória no nível de serviço.
Problemas de E/S e de rede
É possível receber uma das seguintes mensagens de erro devido a erros ou tempo limite de conexão:
- Tempos limite e novas tentativas de conexão: SocketTimeoutException: connect timed out
- Falhas na resolução de DNS: Could not resolve host: api.example.com
- Erros de rede inacessível: Network is unreachable (Host : 'database.example.com'. Port: 5432)
- Erros de conexão recusada: java.net.ConnectException: Connection refused (Connection refused)
- Erros de SSL/TLS: SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Para solucionar problemas de E/S e de rede, realize as seguintes ações:
Erros do banco de dados
Para problemas no banco de dados, é possível receber uma das seguintes mensagens de erro nos logs da sua aplicação:
- Exaustão do grupo de conexões: java.sql.SQLException: Too many connections
- Tempos limite de consulta: ERROR: canceling statement due to statement timeout
- Deadlocks: Deadlock found when trying to get lock; try restarting transaction
- Problemas de conexão: Cannot connect to MySQL server on '*' (111)
Para resolver problemas no banco de dados, otimize as consultas ao banco de dados e, em seguida, recrie seu índice.
Monitore métricas e verificações de integridade do balanceador de carga
Use o Amazon CloudWatch para monitorar métricas sobre balanceadores de carga e destinos.
Analise as respostas da aplicação
É possível receber um dos seguintes códigos de status 5xx:
- HTTP 500 Internal Server Error
- HTTP 502 Bad Gateway
- HTTP 504 Gateway Timeout
Para resolver esses problemas, consulte Common Error Types (Erros comuns).
Verifique se há mensagens de erro nos logs da aplicação
Use o CloudWatch para verificar se há erros nos logs do Amazon ECS, como Connection timeout, Database query exceeded time limit ou Memory limit exceeded. Para identificar erros e analisar gargalos e tempos de resposta, use dados de rastreamento de aplicação.
Otimize o desempenho
Use os métodos a seguir para melhorar o desempenho de suas aplicações hospedadas no Amazon ECS.
Armazene seus dados em cache
Use um sistema de armazenamento em cache para transferir os dados rapidamente. Exemplos de sistemas de armazenamento em cache que é possível usar: Redis, Memcached ou Amazon CloudFront.
Se você usar o tipo de inicialização do EC2, configure ECS_IMAGE_PULL_BEHAVIOR: prefer-cached como o comportamento de extração do agente de contêiner do Amazon ECS. Para obter mais informações, consulte Otimização do tempo de inicialização da tarefa do Amazon ECS.
Use o ajuste de escala automático de aplicações
Use o ajuste de escala automático de aplicações para modificar a contagem de tarefas com base na demanda. Feito isso, configure políticas de escalabilidade.
Para obter mais informações, consulte O que é o Amazon EC2 Auto Scaling?
Otimize imagens de contêiner
Use compilações em vários estágios para reduzir o tamanho da imagem e armazenar em cache suas camadas de imagem. Para obter mais informações, consulte Comportamento dos contêineres Linux na extração de imagens de contêiner do Fargate para o Amazon ECS.
Implemente logs e monitores eficientes
Use a API LogConfiguration para definir níveis de log e, em seguida, use o AWS X-Ray para implementar o rastreamento distribuído.
Informações relacionadas
Mensagens de eventos do serviço do Amazon ECS
CloudWatch metrics for your Application Load Balancer (Métricas do CloudWatch para o Application Load Balancer)
Centralized container logs with Amazon ECS and Amazon CloudWatch Logs (Logs centralizados de contêiner com o Amazon ECS e o Amazon CloudWatch Logs)
Como posso configurar o Amazon ECS Service Auto Scaling no Fargate?