Partilhar via


Diagnosticar erros comuns do pacote de código usando o Service Fabric

Este artigo descreve o que significa para um pacote de código terminar inesperadamente. Ele fornece informações sobre possíveis causas de códigos de erro comuns, juntamente com etapas de solução de problemas.

Quando um processo ou contêiner termina inesperadamente?

Quando o Azure Service Fabric recebe uma solicitação para iniciar um pacote de código, ele começa a preparar o ambiente no sistema local de acordo com as opções definidas nos manifestos do Aplicativo e do Serviço. Esses preparativos podem incluir a reserva de pontos de extremidade ou recursos de rede, a configuração de regras de firewall ou a configuração de restrições de governança de recursos.

Depois que o ambiente tiver sido configurado corretamente, o Service Fabric tentará exibir o pacote de código. Esta etapa é considerada bem-sucedida se o tempo de execução do sistema operacional ou do contêiner informar que o processo ou contêiner foi ativado com êxito. Se a ativação não for bem-sucedida, você verá uma mensagem de integridade no SFX semelhante à seguinte:

There was an error during CodePackage activation. Service host failed to activate. Error: 0xXXXXXXXX

Depois que o pacote de código for ativado com êxito, o Service Fabric começará a monitorar seu tempo de vida. Neste ponto, um processo ou contêiner pode ser encerrado a qualquer momento por vários motivos. Por exemplo, ele pode ter falhado ao inicializar uma DLL, ou o sistema operacional pode ter ficado sem espaço de pilha na área de trabalho. Se o pacote de código foi encerrado, você verá a seguinte mensagem de integridade no SFX:

The process/container terminated with exit code: XXXXXXXX. Please look at your application logs/dump or debug your code package for more details. For information about common termination errors, please visit https://aka.ms/service-fabric-termination-errors

O código de saída nesta mensagem de integridade é a única pista que o processo ou contêiner fornece sobre o motivo pelo qual ele foi encerrado. Ele pode ser gerado por qualquer nível da pilha. Por exemplo, esse código de saída pode estar relacionado a um erro do sistema operacional ou a um problema do .NET ou pode ter sido gerado pelo seu código. Use este artigo como ponto de partida para diagnosticar a origem dos códigos de saída de terminação e possíveis soluções. Mas tenha em mente que essas são soluções gerais para cenários comuns e podem não se aplicar ao erro que você está vendo.

Como posso saber se o Service Fabric encerrou meu pacote de código?

O Service Fabric pode ser responsável por encerrar seu pacote de código por vários motivos. Por exemplo, ele pode decidir colocar o pacote de código em outro nó para fins de balanceamento de carga. Você pode verificar se o Service Fabric encerrou seu pacote de código se vir qualquer um dos códigos de saída na tabela a seguir.

Nota

Se o processo ou contêiner terminar com um código de saída diferente dos códigos da tabela a seguir, o Service Fabric não será responsável por encerrá-lo.

Código de saída Description
7147 Indica que o Service Fabric encerra normalmente o processo ou contêiner enviando-lhe um sinal Ctrl+C.
7148 Indica que o Service Fabric encerrou o processo ou contêiner. Às vezes, esse código de erro indica que o processo ou contêiner não respondeu em tempo hábil após o envio de um sinal Ctrl+C e teve que ser encerrado.

Outros códigos de erro comuns e suas possíveis correções

Código de saída Valor hexadecimal Breve descrição Causa raiz Correção potencial
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Este erro às vezes significa que a máquina ficou sem espaço de pilha na área de trabalho. Essa causa é especialmente provável se você tiver vários processos que pertencem ao seu aplicativo em execução no nó. Se o seu programa não foi criado para responder a sinais Ctrl+C, você pode ativar a configuração EnableActivateNoWindow no manifesto do cluster. Ativar essa configuração significa que seu pacote de código será executado sem uma janela GUI e não receberá sinais Ctrl+C. Essa ação também reduz a quantidade de espaço de heap da área de trabalho que cada processo consome. Se o pacote de código precisar receber sinais Ctrl+C, você poderá aumentar o tamanho da pilha da área de trabalho do nó.
3762504530 0xe0434352 N/A Esse valor representa o código de erro para uma exceção não tratada do código gerenciado (ou seja, .NET). Esse código de saída indica que seu aplicativo gerou uma exceção que permanece sem tratamento e que encerrou o processo. Como primeiro passo para determinar o que desencadeou esse erro, depure os logs e arquivos de despejo do seu aplicativo.

Próximos passos