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 o 503 codice di stato risposte HTTP con l'intestazione Retry-after .
  • 4xx errori come AlreadyExists e InvalidOperation. 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à:

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à.

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.

Rimuovere il nodo dal pool

La rimozione del nodo dal pool è talvolta necessaria.

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.

È 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.

Passaggi successivi