Rilevamento e gestione degli errori in Azure Batch
A volte, potrebbe essere necessario gestire gli errori di attività e applicazioni nella soluzione di Azure Batch. Questo articolo illustra diversi tipi di errori batch e come risolvere i problemi comuni.
Codici di errore
Alcuni tipi generali di errori visualizzati in Batch sono:
- Errori di rete per le richieste che non hanno mai raggiunto Batch o errori di rete quando la risposta batch non ha raggiunto il client in tempo.
- Errori interni del server. Questi errori hanno una risposta HTTP di codice di stato standard
5xx
. - Errori correlati alla limitazione. Questi errori includono
429
o503
codice di stato risposte HTTP con l'intestazioneRetry-after
. -
4xx
errori comeAlreadyExists
eInvalidOperation
. Questi errori indicano che la risorsa non è nello stato corretto per la transizione dello stato.
Per informazioni dettagliate sui codici di errore specifici, vedere Codici di errore e stato batch. Questo riferimento include codici di errore per l'API REST, il servizio Batch e per le attività e la pianificazione dei processi.
Errori delle applicazioni
Durante l'esecuzione, un'applicazione potrebbe produrre output di diagnostica. È possibile usare questo output per risolvere i problemi. Il servizio Batch scrive l'output standard e l'output degli errori standard nei file distdout.txt e stderr.txt nella directory delle attività nel nodo di calcolo. Per altre informazioni, vedere File e directory in Batch.
Per scaricare questi file di output, usare il portale di Azure o uno degli SDK Batch. Ad esempio, per recuperare i file a scopo di risoluzione dei problemi, usare ComputeNode.GetNodeFile e CloudTask.GetNodeFile nella libreria Batch .NET.
Errori attività
Gli errori delle attività rientrano in diverse categorie.
Errori di pre-elaborazione
Se un'attività non può essere avviata, viene impostato un errore di pre-elaborazione per l'attività stessa. Gli errori di pre-elaborazione possono verificarsi se:
- I file di risorse dell'attività sono stati spostati.
- L'account di archiviazione non è più disponibile.
- Si è verificato un altro problema che ha impedito la copia di file nel nodo.
In caso di errori di caricamento file
Se i file specificati per un'attività non riescono a caricare per qualsiasi motivo, viene impostato un errore di caricamento file per l'attività. Gli errori di caricamento dei file possono verificarsi se:
- Il token di firma di accesso condiviso fornito per l'accesso ad Archiviazione di Azure non è valido.
- Il token di firma di accesso condiviso non fornisce autorizzazioni di scrittura.
- L'account di archiviazione non è più disponibile.
- Si è verificato un altro problema che ha impedito la copia di file dal nodo.
Errori delle applicazioni
Il processo specificato dalla riga di comando dell'attività può anche non riuscire. Per altre informazioni, vedere Codici di uscita attività.
Per gli errori dell'applicazione, configurare Batch per riprovare automaticamente l'attività fino a un numero specificato di volte.
Errori di vincolo
Per specificare la durata massima di esecuzione per un processo o un'attività, impostare il maxWallClockTime
vincolo. Usare questa impostazione per terminare le attività che non riescono a procedere.
Quando l'attività supera il tempo massimo:
- L'attività viene contrassegnata come completata.
- Il codice di uscita è impostato su
0xC000013A
. - Il campo schedulingError è contrassegnato come
{ category:"ServerError", code="TaskEnded"}
.
Codici di uscita delle attività
Quando un'attività esegue un processo, il servizio Batch popola la proprietà del codice di uscita dell'attività con il codice restituito del processo. Se il processo restituisce un codice di uscita diverso da zero, il servizio Batch contrassegna l'attività come non riuscita.
Il servizio Batch non determina il codice di uscita di un'attività. Il processo stesso, o il sistema operativo in cui viene eseguito il processo, determina il codice di uscita.
Errori o interruzioni delle attività
In alcuni casi, le attività non riescono o vengono interrotte. Ad esempio:
- L'applicazione dell'attività stessa potrebbe non riuscire.
- Il nodo in cui è in esecuzione l'attività potrebbe essere riavviato.
- Un'operazione di ridimensionamento potrebbe rimuovere il nodo dal pool. Questa azione può verificarsi se il criterio deallocation del pool rimuove immediatamente i nodi senza attendere il completamento delle attività.
In tutti i casi Batch può ripetere automaticamente l'attività per l'esecuzione in un altro nodo.
È anche possibile che un problema intermittente causi un'attività di interrompere la risposta o richiedere troppo tempo per l'esecuzione. È possibile impostare un intervallo di esecuzione massimo per un'attività. Se un'attività supera l'intervallo, il servizio Batch interrompe l'applicazione attività.
Connessione ai nodi di calcolo
È possibile eseguire il debug e la risoluzione dei problemi eseguendo l'accesso a un nodo di calcolo in remoto. Usare il portale di Azure per scaricare un file RDP (Remote Desktop Protocol) per i nodi Windows e ottenere informazioni di connessione Secure Shell (SSH) per i nodi Linux. È anche possibile scaricare queste informazioni usando le API Batch .NET o Batch Python .
Per connettersi a un nodo tramite RDP o SSH, creare prima di tutto un utente nel nodo. Utilizzare una delle seguenti modalità:
- Ilportale di Azure
- API REST batch: adduser
- API .NET batch: ComputeNode.CreateComputeNodeUser
- Modulo Python batch: add_user
Se necessario, configurare o disabilitare l'accesso ai nodi di calcolo.
Risolvere i problemi relativi ai nodi
L'applicazione client o il servizio Batch possono esaminare i metadati delle attività non riuscite per identificare un nodo del problema. Ogni nodo in un pool ha un ID univoco. I metadati delle attività includono il nodo in cui viene eseguita un'attività. Dopo aver trovato il nodo del problema, provare i metodi seguenti per risolvere l'errore.
Nodo di riavvio
Il riavvio di un nodo a volte risolve problemi latenti, ad esempio processi bloccati o bloccati. Se il pool usa un'attività di avvio o il processo usa un'attività di preparazione del processo, un nodo esegue queste attività.
- API REST batch: riavvio
- API .NET batch: ComputeNode.Reboot
Nodo reimage
La ripetizione di un nodo reinstalla il sistema operativo. Avviare attività e attività di preparazione dei processi rieseguire dopo l'esecuzione della ripetizione.
- API REST batch: reimage
- API .NET batch: ComputeNode.Reimage
Rimuovere il nodo dal pool
La rimozione del nodo dal pool è talvolta necessaria.
- API REST batch: removenodes
- API .NET batch: PoolOperations
Disabilitare la pianificazione delle attività nel nodo
La disabilitazione della pianificazione delle attività in un nodo accetta in modo efficace il nodo offline. Batch non assegna altre attività al nodo. Tuttavia, il nodo continua a essere in esecuzione nel pool. È quindi possibile analizzare ulteriormente gli errori senza perdere i dati dell'attività non riuscita. Anche il nodo non causerà altri errori di attività.
Ad esempio, disabilitare la pianificazione delle attività nel nodo. Accedere quindi al nodo in modalità remota. Esaminare i registri eventi ed eseguire altre operazioni di risoluzione dei problemi. Dopo aver risolto i problemi, abilitare di nuovo la pianificazione delle attività per riportare il nodo online.
- API REST batch: abilita l'ottimizzazione
- API Batch .NET: ComputeNode.EnableScheduling
È possibile usare queste azioni per specificare batch gestisce le attività attualmente in esecuzione nel nodo. Ad esempio, quando si disabilita la pianificazione delle attività con l'API Batch .NET, è possibile specificare un valore di enumerazione per DisableComputeNodeSchedulingOption. È possibile scegliere di:
- Terminare le attività in esecuzione:
Terminate
- Riesegue le attività per la pianificazione in altri nodi:
Requeue
- Consentire il completamento delle attività in esecuzione prima di eseguire l'azione:
TaskCompletion
Riprovare dopo gli errori
Le API batch segnalano gli errori. È possibile ritentare tutte le API usando il gestore di ripetizione dei tentativi globale predefinito. È consigliabile usare questa opzione.
Dopo un errore, attendere alcuni secondi prima di riprovare. Se si ritenta troppo spesso o troppo rapidamente, il gestore di tentativi limita le richieste.