Como resolvo tarefas que estão travadas no estado Em execução em meu ambiente do Amazon MWAA?
Quero solucionar problemas de tarefas que estão travadas no estado Em execução ou são tarefas zumbis em meu ambiente do Amazon Managed Workflows for Apache Airflow (Amazon MWAA).
Breve descrição
Quando você executa Grafos acíclicos direcionados (DAGs) no Amazon MWAA, as tarefas podem ficar travadas no estado Em execução ou se tornarem tarefas zumbis. Isso pode acontecer mesmo quando todas as tarefas e trabalhos secundários estão concluídos, não há erros nos logs das tarefas e o status mostra sucesso ou falha. Esse problema pode afetar tarefas individuais ou DAGs inteiros e exigir que você os marque como bem-sucedidos ou falhos para continuar a execução do pipeline.
Esse erro pode ocorrer pelos seguintes motivos:
- Há um uso excessivo de recursos pelos processamentos.
- Há problemas de conexão de banco de dados entre os contêineres do processamento e do agendador.
- Existem restrições de recursos do agendador.
- Há uma configuração incorreta dos parâmetros do Apache Airflow.
- Você não segue as práticas recomendadas de gravação do DAG.
**Observação:**para obter mais informações, consulte Best practices (Práticas recomendadas) no site do Apache Airflow.
Resoluções
Monitore e otimize os recursos do processamento
As tarefas ficam travadas no estado Em execução quando os processamentos experimentam um uso excessivo de CPU ou de memória. Quando os processamentos ficam sobrecarregados, eles perdem a conectividade com o banco de dados de metadados e não conseguem atualizar adequadamente o status da tarefa.
Para verificar o uso dos recursos do processamento, conclua as seguintes etapas:
- Use o console do Amazon CloudWatch para verificar o uso de recursos para processamentos de base e adicionais.
- Selecione Máximo para a estatística e escolha um período detalhado de 1 minuto ou 5 minutos.
- Procure picos consistentes que sejam superiores a 80%. Isso indica restrições de recursos.
Observação: certifique-se de que o uso de memória e CPU seja inferior ao limite de 90%.
Para otimizar os recursos dos processamentos, realize as seguintes ações:
- Acesse o dag_processor_manager.log no grupo de logs de processamento do DAG. Se você tiver tempos elevados de análise de DAG, deve refatorar o DAG. Para obter mais informações, consulte dag_processor_manager_log_location no site do Apache Airflow.
- Revise e refatore o código enviado ao agendador e aos processamentos. Para obter mais informações, consulte Reducing DAG complexity (Reduzir a complexidade do DAG) no site do Apache Airflow.
- Ajuste o celery.worker_autoscale para um valor menor do que o nível padrão de simultaneidade para sua classe do ambiente.
- Identifique os períodos em que o workload é a mais pesado e escalone a execução da tarefa. Use depends_on_past ou outras dependências para adicionar pequenos atrasos entre grupos de tarefas.
- Defina logs de processamento, agendador e servidor web para o nível WARNING em vez de INFO. Quando os níveis de log são definidos para o nível INFO, o Amazon MWAA cria muitos logs detalhados no CloudWatch. O registro excessivo em log pode diminuir o desempenho da sua CPU e consumir muitos recursos.
Resolva problemas de conexão de banco de dados
As tarefas também podem ficar travadas no estado Em execução quando os processamentos perdem a conexão com o banco de dados de metadados. Isso pode impedir atualizações de status. Quando esse problema ocorre, você recebe as seguintes mensagens de erro relacionadas ao banco de dados:
- "psycopg2.OperationalError: SSL connection has been closed unexpectedly"
- "sqlalchemy.exc.OperationalError: (psycopg2.errors.ConnectionException) Timed-out waiting to acquire database connection"
- Erros SIGTERM/SIGKILL.
Para resolver problemas de conexão com o banco de dados, realize as seguintes ações:
- Para criar um novo interpretador Python para cada tarefa, isolar a conectividade do banco de dados e evitar problemas de conexão em várias tarefas, defina core.execute_tasks_new_python_interpreter como True.
Observação: para obter mais informações, consulte Setting configuration options (Definindo opções de configuração) no site do Apache Airflow. - Para minimizar a carga do banco de dados, limpe o banco de dados de metadados do PostgreSQL regularmente.
Observação: evite passar grandes volumes de dados pelo XCom. Em vez disso, use o Amazon Simple Storage Service (Amazon S3) para transmitir e armazenar grandes strings de dados. - Use chamadas variáveis somente quando necessário e de acordo com as práticas recomendadas de gravação do DAG.
Observação: cada chamada para uma variável abre uma conexão de banco de dados. - Para ajustar o desempenho do banco de dados, ajuste core.min_serialized_dag_update_interval, scheduler.dag_dir_list_interval scheduler.min_file_process_interval e scheduler.scheduler_idle_sleep_time.
Otimize o desempenho do agendador
A sobrecarga do agendador pode fazer com que as tarefas fiquem travadas no estado Em execução quando o agendador não consegue acompanhar adequadamente o progresso da tarefa.
Para resolver esse problema, realize as seguintes ações:
- Para reduzir a carga do agendador, adicione scheduler.schedule_after_task_execution e defina-o como False. Adicione também scheduler.parsing\ _processes.
- Para monitorar a integridade do agendador, verifique se há quedas na métrica SchedulerHeartbeat do CloudWatch.
Siga as práticas recomendadas do Apache Airflow
DAGs complexos podem contribuir para que as tarefas fiquem travadas no estado Em execução.
Para evitar esses problemas, realize as seguintes ações:
- Evite o processamento pesado de dados em processamentos do Apache Airflow. Em vez disso, descarregue as operações de uso intensivo de computação para serviços específicos, como Amazon EMR, AWS Glue ou Amazon Elastic Kubernetes Service (Amazon EKS).
- Mova as importações e a lógica para dentro das funções da tarefa quando possível.
Observação: o código de nível superior executa cada ciclo de análise do DAG e consome recursos. - Crie um arquivo .airflowignore para excluir DAGs desnecessários do processamento.
- Evite chamar variáveis do Apache Airflow no código de nível superior. Use o armazenamento em cache de variáveis quando elas forem necessárias no tempo de análise.
- Implemente operadores adiáveis para processos externos de longa duração.
Observação: esses processamentos liberam vagas de processamento enquanto aguardam processos externos e evitam que os processamentos permaneçam ocupados durante períodos de espera ociosos.
Faça upgrade na classe do ambiente
Se você ainda tiver problemas depois de otimizar seu ambiente, faça upgrade da sua classe do ambiente. Cada instância de classe dobra os recursos computacionais que estão disponíveis para que seu ambiente execute tarefas.
Informações relacionadas
Ajuste de desempenho para o Apache Airflow no Amazon MWAA
Como configurar a classe do ambiente do Amazon MWAA
Configuration reference (Referência de configuração) no site do Apache Airflow
- Tópicos
- Application Integration
- Idioma
- Português

Conteúdo relevante
feita há um ano