Condividi tramite


Diagnosticare gli errori comuni del pacchetto di codice con Service Fabric

Questo articolo descrive cosa significa la terminazione imprevista del pacchetto di codice. Fornisce informazioni dettagliate sulle possibili cause dei codici di errore comuni, nonché sui passaggi per la risoluzione dei problemi.

Quando viene terminato in modo imprevisto un processo o un contenitore?

Quando Azure Service Fabric riceve una richiesta di avvio di un pacchetto di codice, inizia a preparare l'ambiente nel sistema locale in base alle opzioni impostate nei manifesti dell'app e del servizio. Queste operazioni di preparazione possono includere la prenotazione di endpoint di rete o risorse, la configurazione delle regole del firewall o la configurazione di vincoli di governance per le risorse.

Dopo aver configurato correttamente l'ambiente, Service Fabric tenta di visualizzare il pacchetto di codice. Questo passaggio viene considerato riuscito se il sistema operativo o il runtime del contenitore segnala che il processo o il contenitore è stato attivato correttamente. Se l'attivazione non riesce, verrà visualizzato un messaggio di integrità in SFX simile al seguente:

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

Dopo aver attivato correttamente il pacchetto di codice, Service Fabric inizia a monitorarne la durata. A questo punto, la terminazione di un processo o un contenitore può avvenire in qualsiasi momento per diversi motivi. Ad esempio, potrebbe non essere stato possibile inizializzare una DLL oppure il sistema operativo potrebbe avere esaurito lo spazio dell'heap desktop. Se il pacchetto di codice viene terminato, verrà visualizzato il messaggio di integrità seguente in 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

Il codice di uscita in questo messaggio di integrità è l'unico indizio che il processo o il contenitore fornisce sul motivo per cui è stato terminato. Può essere generato a qualsiasi livello dello stack. Ad esempio, il codice di uscita potrebbe essere correlato a un errore del sistema operativo o a un problema .NET oppure potrebbe essere stato generato dal codice. Usare questo articolo come punto di partenza per diagnosticare l'origine dei codici di uscita di terminazione e determinare le possibili soluzioni. Tenere tuttavia presente che si tratta di soluzioni generali a scenari comuni che potrebbero non essere applicabili all'errore visualizzato.

Come è possibile stabilire se Service Fabric ha terminato il pacchetto di codice?

Service Fabric potrebbe aver terminato il pacchetto di codice per diversi motivi. Ad esempio, potrebbe decidere di inserire il pacchetto di codice in un altro nodo a scopo di bilanciamento del carico. È possibile verificare che Service Fabric ha terminato il pacchetto di codice se viene visualizzato uno dei codici di uscita nella tabella seguente.

Nota

Se il processo o il contenitore è stato terminato con un codice di uscita diverso dai codici nella tabella seguente, Service Fabric non è responsabile della terminazione.

Codice di uscita Descrizione
7147 Indica che Service Fabric ha arrestato normalmente il processo o il contenitore inviando un segnale Ctrl+C.
7148 Indica che Service Fabric ha terminato il processo o il contenitore. In alcuni casi, questo codice di errore indica che il processo o il contenitore non ha risposto in modo tempestivo dopo l'invio di un segnale Ctrl+C e ha dovuto essere terminato.

Altri codici di errore comuni e relative potenziali correzioni

Codice di uscita Valore esadecimale Descrizione breve Causa principale Potenziale correzione
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Questo errore indica talvolta che il computer ha esaurito lo spazio dell'heap desktop. Questa causa è particolarmente probabile se ci sono numerosi processi che appartengono all'applicazione in esecuzione nel nodo. Se il programma non è stato compilato per rispondere ai segnali Ctrl+C, è possibile abilitare l'impostazione EnableActivateNoWindow nel manifesto del cluster. L'abilitazione di questa impostazione indica che il pacchetto di codice verrà eseguito senza una finestra GUI e non riceverà segnali Ctrl+C. Questa azione riduce anche la quantità di spazio dell'heap desktop utilizzata da ogni processo. Se il pacchetto di codice deve ricevere segnali Ctrl+C, è possibile aumentare le dimensioni dell'heap desktop del nodo.
3762504530 0xe0434352 N/D Questo valore rappresenta il codice di errore per un'eccezione non gestita dal codice gestito, ovvero .NET. Questo codice di uscita indica che l'applicazione ha generato un'eccezione che rimane non gestita e che ha terminato il processo. Il primo passaggio per determinare l'attivazione di questo errore consiste nell’eseguire il debug dei log e dei file di dump dell'applicazione.

Passaggi successivi