Share via


Diagnosticare gli errori comuni del pacchetto di codice usando Service Fabric

Questo articolo descrive il significato di un pacchetto di codice per terminare in modo imprevisto. Fornisce informazioni dettagliate sulle possibili cause dei codici di errore comuni, insieme alla procedura di risoluzione dei problemi.

Quando un processo o un contenitore termina in modo imprevisto?

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 delle risorse.

Dopo aver configurato correttamente l'ambiente, Service Fabric tenta di visualizzare il pacchetto di codice. Questo passaggio viene considerato corretto se il runtime del sistema operativo o 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 che il pacchetto di codice è stato attivato correttamente, Service Fabric inizia a monitorarne la durata. A questo punto, un processo o un contenitore può terminare in qualsiasi momento per diversi motivi. Ad esempio, potrebbe non essere stato possibile inizializzare una DLL o il sistema operativo potrebbe aver esaurito lo spazio dell'heap desktop. Se il pacchetto di codice è 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 è stata terminata. Può essere generato da qualsiasi livello dello stack. Ad esempio, questo 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 le possibili soluzioni. Tenere tuttavia presente che si tratta di soluzioni generali a scenari comuni e che potrebbero non essere applicabili all'errore visualizzato.

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

Service Fabric potrebbe essere responsabile della terminazione del 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 nella tabella seguente è presente uno dei codici di uscita.

Nota

Se il processo o il contenitore termina con un codice di uscita diverso dai codici nella tabella seguente, Service Fabric non è responsabile del termine.

Codice di uscita Descrizione
7147 Indica che Service Fabric arresta correttamente 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 che doveva essere terminato.

Altri codici di errore comuni e le relative potenziali correzioni

Codice di uscita Valore esadecimale Breve descrizione Causa radice Potenziale correzione
3221225794 0xc0000142 STATUS_DLL_INIT_FAILED Questo errore a volte indica che il computer ha esaurito lo spazio dell'heap desktop. Questa causa è particolarmente probabile se sono presenti 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 significa 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. Come primo passaggio per determinare l'attivazione di questo errore, eseguire il debug dei log e dei file di dump dell'applicazione.

Passaggi successivi