Processamento e deteção de erros no Azure Batch
Por vezes, poderá ter de lidar com falhas de tarefas e aplicações na sua solução de Azure Batch. Este artigo explica diferentes tipos de erros do Batch e como resolver problemas comuns.
Códigos de erro
Alguns tipos gerais de erros que poderá ver no Batch são:
- Falhas de rede para pedidos que nunca chegaram ao Batch ou falhas de rede quando a resposta do Batch não chegou ao cliente a tempo.
- Erros internos do servidor. Estes erros têm uma resposta HTTP de código de estado padrão
5xx
. - Erros relacionados com limitação. Estes erros incluem
429
ou503
código de estado respostas HTTP com oRetry-after
cabeçalho. -
4xx
erros comoAlreadyExists
eInvalidOperation
. Estes erros indicam que o recurso não está no estado correto para a transição de estado.
Para obter informações detalhadas sobre códigos de erro específicos, veja Códigos de estado e erro do Batch. Esta referência inclui códigos de erro para a API REST, o serviço Batch e para tarefas de trabalho e agendamento.
Falhas de aplicações
Durante a execução, uma aplicação pode produzir resultados de diagnóstico. Pode utilizar este resultado para resolver problemas. O serviço Batch escreve a saída padrão e a saída de erro padrão para os ficheiros stdout.txt e stderr.txt no diretório de tarefas no nó de computação. Para obter mais informações, veja Ficheiros e diretórios no Batch.
Para transferir estes ficheiros de saída, utilize o portal do Azure ou um dos SDKs do Batch. Por exemplo, para obter ficheiros para fins de resolução de problemas, utilize ComputeNode.GetNodeFile e CloudTask.GetNodeFile na biblioteca .NET do Batch.
Erros de tarefa
Os erros de tarefa enquadram-se em várias categorias.
Erros de pré-processamento
Se ocorrer uma falha ao iniciar uma tarefa, é definido um erro de pré-processamento para a mesma. Podem ocorrer erros de pré-processamento se:
- Os ficheiros de recursos da tarefa foram movidos.
- A conta de armazenamento já não está disponível.
- Ocorreu outro problema que impediu a cópia bem-sucedida de ficheiros para o nó.
Erros de carregamento de ficheiros
Se os ficheiros que especificou para uma tarefa não forem carregados por qualquer motivo, é definido um erro de carregamento de ficheiros para a tarefa. Podem ocorrer erros de carregamento de ficheiros se:
- O token de assinatura de acesso partilhado (SAS) fornecido para aceder ao Armazenamento do Azure é inválido.
- O token de SAS não fornece permissões de escrita.
- A conta de armazenamento já não está disponível.
- Ocorreu outro problema que impedia a cópia bem-sucedida de ficheiros do nó.
Erros de aplicações
O processo especificado pela linha de comandos da tarefa também pode falhar. Para obter mais informações, veja Códigos de saída de tarefas.
Para erros de aplicações, configure o Batch para repetir automaticamente a tarefa até um número especificado de vezes.
Erros de restrição
Para especificar a duração máxima de execução de uma tarefa ou tarefa, defina a maxWallClockTime
restrição. Utilize esta definição para terminar tarefas que não progridam.
Quando a tarefa exceder o tempo máximo:
- A tarefa está marcada como concluída.
- O código de saída está definido como
0xC000013A
. - O campo schedulingError está marcado como
{ category:"ServerError", code="TaskEnded"}
.
Códigos de saída de tarefa
Quando uma tarefa executa um processo, o Batch preenche a propriedade do código de saída dessa tarefa com o código de devolução do processo. Se o processo devolver um código de saída diferente de zero, o serviço Batch marca a tarefa como falhada.
O serviço Batch não determina o código de saída de uma tarefa. O próprio processo, ou o sistema operativo no qual o processo é executado, determina o código de saída.
Falhas ou interrupções de tarefas
Por vezes, as tarefas podem falhar ou ser interrompidas. Por exemplo:
- A própria aplicação de tarefas pode falhar.
- O nó no qual a tarefa está em execução pode ser reiniciado.
- Uma operação de redimensionamento pode remover o nó do conjunto. Esta ação poderá ocorrer se a política de desalocação do conjunto remover os nós imediatamente sem aguardar que as tarefas sejam concluídas.
Em todos os casos, o Batch pode colocar automaticamente a tarefa em fila para execução noutro nó.
Também é possível que um problema intermitente faça com que uma tarefa deixe de responder ou demorou muito tempo a ser executada. Pode definir um intervalo de execução máximo para uma tarefa. Se uma tarefa exceder o intervalo, o serviço Batch interrompe a aplicação de tarefas.
Ligar a nós de computação
Pode efetuar a depuração e a resolução de problemas ao iniciar sessão num nó de computação remotamente. Utilize o portal do Azure para transferir um ficheiro RDP (Remote Desktop Protocol) para nós do Windows e obter informações de ligação secure shell (SSH) para nós do Linux. Também pode transferir estas informações com as APIs do Batch .NET ou do Batch Python .
Para ligar a um nó através de RDP ou SSH, crie primeiro um utilizador no nó. Utilize um dos métodos seguintes:
- O portal do Azure
- API REST do Batch: adduser
- API .NET do Batch: ComputeNode.CreateComputeNodeUser
- Módulo Batch Python: add_user
Se necessário, configure ou desative o acesso aos nós de computação.
Resolver problemas de nós
A aplicação ou serviço cliente do Batch pode examinar os metadados das tarefas falhadas para identificar um nó de problema. Cada nó num conjunto tem um ID exclusivo. Os metadados da tarefa incluem o nó onde uma tarefa é executada. Depois de encontrar o nó do problema, experimente os seguintes métodos para resolver a falha.
Reiniciar nó
Reiniciar um nó por vezes corrige problemas latentes, como processos bloqueados ou com falhas. Se o conjunto utilizar uma tarefa de início ou a tarefa utilizar uma tarefa de preparação de tarefas, um reinício do nó executa estas tarefas.
- API REST do Batch: reiniciar
- API .NET do Batch: ComputeNode.Reboot
Recriar imagem do nó
Reimaginar um nó reinstala o sistema operativo. Inicie tarefas e tarefas de preparação de tarefas novamente executadas após a recriação.
- API REST do Batch: reimage
- API .NET do Batch: ComputeNode.Reimage
Remover nó do conjunto
Por vezes, é necessário remover o nó do conjunto.
- API REST do Batch: removenodes
- API .NET do Batch: PoolOperations
Desativar o agendamento de tarefas no nó
Desativar o agendamento de tarefas num nó deixa o nó offline de forma eficaz. O Batch não atribui mais tarefas ao nó. No entanto, o nó continua em execução no conjunto. Em seguida, pode investigar mais aprofundadamente as falhas sem perder os dados da tarefa falhada. O nó também não causará mais falhas de tarefas.
Por exemplo, desative o agendamento de tarefas no nó. Em seguida, inicie sessão no nó remotamente. Examine os registos de eventos e efetue outras resoluções de problemas. Depois de resolver os problemas, ative novamente o agendamento de tarefas para colocar o nó novamente online.
- API REST do Batch: enablescheduling
- API .NET do Batch: ComputeNode.EnableScheduling
Pode utilizar estas ações para especificar que o Batch processa tarefas atualmente em execução no nó. Por exemplo, quando desativar o agendamento de tarefas com a API .NET do Batch, pode especificar um valor de enumeração para DisableComputeNodeSchedulingOption. Pode optar por:
- Terminar tarefas em execução:
Terminate
- Reconsultar tarefas para agendamento noutros nós:
Requeue
- Permitir a conclusão das tarefas em execução antes de executar a ação:
TaskCompletion
Repetir após erros
As APIs do Batch notificam-no sobre falhas. Pode repetir todas as APIs com o processador de repetições global incorporado. É uma melhor prática utilizar esta opção.
Após uma falha, aguarde vários segundos antes de tentar novamente. Se repetir com demasiada frequência ou com demasiada rapidez, o processador de repetição limita os pedidos.