Ir para o conteúdo

Como soluciono problemas de desempenho em minhas aplicações hospedadas no Amazon ECS?

5 minuto de leitura
0

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:

  1. Abra o console do Amazon ECS.
  2. No painel de navegação, clique em Definições de tarefa.
  3. Selecione Criar uma nova definição de tarefa.
  4. 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?
  5. Escolha os tipos de instância de contêiner do Amazon Elastic Compute Cloud (Amazon EC2) para alocar recursos.
  6. 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?

AWS OFICIALAtualizada há 2 anos