Share via


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

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

Quando é que um processo ou contentor termina inesperadamente?

Quando o Azure Service Fabric recebe um pedido para iniciar um pacote de código, começa a preparar o ambiente no sistema local de acordo com as opções definidas nos manifestos de Aplicação e Serviço. Estas preparações podem incluir a reserva de pontos finais ou recursos de rede, a configuração de regras de firewall ou a configuração de restrições de governação de recursos.

Depois de o ambiente ter sido configurado corretamente, o Service Fabric tenta apresentar o pacote de código. Este passo é considerado com êxito se o SO ou o runtime do contentor indicarem que o processo ou o contentor foi ativado com êxito. Se a ativação não for bem-sucedida, deverá ver uma mensagem de estado de funcionamento no SFX semelhante à seguinte:

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

Depois de o pacote de código ter sido ativado com êxito, o Service Fabric começa a monitorizar a sua duração. Neste momento, um processo ou contentor pode terminar em qualquer altura por vários motivos. Por exemplo, pode não ter sido possível inicializar uma DLL ou o SO pode ter ficado sem espaço na área de trabalho. Se o pacote de código terminar, deverá ver a seguinte mensagem de estado de funcionamento 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 estado de funcionamento é a única pista que o processo ou contentor fornece sobre o motivo pelo qual terminou. Pode ser gerado por qualquer nível da pilha. Por exemplo, este código de saída pode estar relacionado com um erro do SO ou um problema .NET ou pode ter sido gerado pelo seu código. Utilize este artigo como ponto de partida para diagnosticar a origem dos códigos de saída de terminação e possíveis soluções. No entanto, tenha em atenção que estas são soluções gerais para cenários comuns e que podem não se aplicar ao erro que está a ver.

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

O Service Fabric pode ser responsável por terminar o pacote de código por vários motivos. Por exemplo, pode decidir colocar o pacote de código noutro nó para fins de balanceamento de carga. Pode verificar se o Service Fabric terminou o pacote de código se vir algum dos códigos de saída na tabela seguinte.

Nota

Se o seu processo ou contentor terminar com um código de saída diferente dos códigos na tabela seguinte, o Service Fabric não é responsável por o terminar.

Código de saída Descrição
7147 Indica que o Service Fabric encerrou corretamente o processo ou o contentor enviando-lhe um sinal Ctrl+C.
7148 Indica que o Service Fabric terminou o processo ou o contentor. Por vezes, este código de erro indica que o processo ou contentor não respondeu em tempo útil após o envio de um sinal Ctrl+C e teve de ser terminado.

Outros códigos de erro comuns e as correções potenciais

Código de saída Valor hexadecimal Breve descrição Causa raiz Correção potencial
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Por vezes, este erro significa que o computador está a ficar sem espaço na área de trabalho. Esta causa é especialmente provável se tiver vários processos que pertencem à sua aplicação em execução no nó. Se o programa não tiver sido criado para responder aos sinais Ctrl+C, pode ativar a definição EnableActivateNoWindow no manifesto do Cluster. Ativar esta definição significa que o pacote de código será executado sem uma janela gui e não receberá sinais Ctrl+C. Esta ação também reduz a quantidade de espaço em área dinâmica de trabalho que cada processo consome. Se o pacote de código precisar de receber sinais Ctrl+C, pode aumentar o tamanho da área de trabalho do nó.
3762504530 0xe0434352 N/D Este valor representa o código de erro de uma exceção não processada do código gerido (ou seja, .NET). Este código de saída indica que a sua aplicação levantou uma exceção que permanece não processada e que terminou o processo. Como primeiro passo para determinar o que acionou este erro, depure os registos da aplicação e os ficheiros de informação de falha de sistema.

Passos seguintes