Share via


Diagnosticar erros comuns de pacote de códigos usando o Service Fabric

Este artigo descreve o que significa quando um pacote de códigos termina inesperadamente. Ele fornece informações sobre as possíveis causas de códigos de erros comuns, juntamente com as 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ódigos, 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. Essas preparações podem incluir a reserva de recursos ou pontos de extremidade 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á abrir o pacote de códigos. Esta etapa será considerada bem-sucedida se o tempo de execução do sistema operacional ou contêiner relatar que o processo ou o contêiner foi ativado com sucesso. Se a ativação não for bem-sucedida, você verá uma mensagem de integridade em SFX que se assemelha ao seguinte:

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

Depois que o pacote de códigos tiver sido ativado com êxito, o Service Fabric começará a monitorar seu tempo de vida. Neste ponto, um processo ou contêiner pode terminar a qualquer momento por vários motivos. Por exemplo, ele pode ter falhado em inicializar uma DLL ou o sistema operacional pode ter esgotado o espaço de heap de área de trabalho. Se seu pacote de códigos terminar, você verá a seguinte mensagem de integridade em 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 nessa mensagem de integridade é a única pista que o processo ou o contêiner fornece sobre o motivo pelo qual ele terminou. 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 um ponto de partida para diagnosticar a origem dos códigos de saída de término e as 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 saber se o Service Fabric terminou meu pacote de código?

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

Observação

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

Código de saída Descrição
7147 Indica que o Service Fabric desliga normalmente o processo ou o contêiner enviando-o um sinal Ctrl+C.
7148 Indica que o Service Fabric terminou o processo ou o contêiner. Às vezes, esse código de erro indica que o processo ou o contêiner não respondeu oportunamente depois de enviar um sinal Ctrl+C e precisou ser encerrado.

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

Código de saída Valor hexadecimal Descrição breve Causa raiz Possível correção
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Esse erro, às vezes, significa que a máquina ficou sem espaço de heap de á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 seu programa não foi criado para responder a sinais Ctrl+C, você poderá habilitar a configuração EnableActivateNoWindow no manifesto do cluster. A habilitação dessa configuração significa que seu pacote de códigos será executado sem uma janela GUI e não receberá sinais de Ctrl+C. Essa ação também reduz a quantidade de espaço de heap de área de trabalho que cada processo consome. Se o seu pacote de códigos precisar receber sinais Ctrl+C, será possível aumentar o tamanho do heap da área de trabalho do nó.
3762504530 0xe0434352 N/D Esse valor representa o código de erro para uma exceção sem tratamento 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 terminou o processo. Como primeira etapa para determinar o que disparou esse erro, depure os logs e os arquivos de despejo do aplicativo.

Próximas etapas