Partager via


Gestion et détection des erreurs dans Azure Batch

Parfois, vous devrez peut-être gérer les échecs de tâche et d’application dans votre solution Azure Batch. Cet article explique différents types d’erreurs Batch et explique comment résoudre les problèmes courants.

Codes d’erreur

Voici quelques types généraux d’erreurs que vous pouvez voir dans Batch :

  • Échecs de mise en réseau pour les requêtes qui n’ont jamais atteint Batch ou les défaillances réseau lorsque la réponse Batch n’a pas atteint le client dans le temps.
  • Erreurs de serveur interne. Ces erreurs ont une réponse HTTP de code d’état standard 5xx .
  • Erreurs liées à la limitation. Ces erreurs incluent ou 429 code 503 d’état des réponses HTTP avec l’en-têteRetry-after.
  • 4xx erreurs telles que AlreadyExists et InvalidOperation. Ces erreurs indiquent que la ressource n’est pas dans l’état correct pour la transition d’état.

Pour plus d’informations sur les codes d’erreur spécifiques, consultez l’état et les codes d’erreur Batch. Cette référence inclut des codes d’erreur pour l’API REST, le service Batch et pour les tâches de travail et la planification.

Échecs d’application

Pendant l’exécution, une application peut produire une sortie de diagnostic. Vous pouvez utiliser cette sortie pour résoudre les problèmes. Le service Batch écrit une sortie standard et une sortie d’erreur standard dans les fichiersstdout.txt et stderr.txt dans le répertoire des tâches sur le nœud de calcul. Pour plus d’informations, consultez Fichiers et répertoires dans Batch.

Pour télécharger ces fichiers de sortie, utilisez le portail Azure ou l’un des kits SDK Batch. Par exemple, pour récupérer des fichiers à des fins de résolution des problèmes, utilisez ComputeNode.GetNodeFile et CloudTask.GetNodeFile dans la bibliothèque Batch .NET.

Erreurs de tâche

Les erreurs de tâche se trouvent dans plusieurs catégories.

Erreurs de prétraitement

Si une tâche ne parvient pas à démarrer, une erreur de prétraitement est définie pour la tâche. Les erreurs de prétraitement peuvent se produire si :

  • Les fichiers de ressources de la tâche ont été déplacés.
  • Le compte de stockage n’est plus disponible.
  • Un autre problème s’est produit qui empêchait la copie réussie de fichiers sur le nœud.

Erreurs de chargement de fichiers

Si les fichiers que vous avez spécifiés pour une tâche ne parviennent pas à être téléchargés pour une raison quelconque, une erreur de chargement de fichier est définie pour la tâche. Les erreurs de chargement de fichier peuvent se produire si :

  • Le jeton de signature d’accès partagé (SAP) fourni pour accéder au stockage Azure n’est pas valide.
  • Le jeton SAP ne fournit pas d’autorisations d’écriture.
  • Le compte de stockage n’est plus disponible.
  • Un autre problème s’est produit qui empêchait la copie réussie de fichiers à partir du nœud.

Erreurs d’application

Le processus spécifié par la ligne de commande de la tâche peut également échouer. Pour plus d’informations, consultez les codes de sortie de tâche.

Pour les erreurs d’application, configurez Batch pour réessayer automatiquement la tâche jusqu’à un nombre spécifié de fois.

Erreurs de contrainte

Pour spécifier la durée d’exécution maximale d’un travail ou d’une tâche, définissez la maxWallClockTime contrainte. Utilisez ce paramètre pour arrêter les tâches qui ne parviennent pas à progresser.

Lorsque la tâche dépasse la durée maximale :

  • La tâche est marquée comme terminée.
  • Le code de sortie est défini sur 0xC000013A.
  • Le champ schedulingError est marqué comme { category:"ServerError", code="TaskEnded"}.

Codes de sortie de tâche

Lorsqu’une tâche exécute un processus, Batch remplit la propriété de code de sortie de la tâche avec le code de retour du processus. Si le processus retourne un code de sortie différent de zéro, le service Batch marque la tâche comme ayant échoué.

Le service Batch ne détermine pas le code de sortie d’une tâche. Le processus lui-même, ou le système d’exploitation sur lequel le processus s’exécute, détermine le code de sortie.

Échecs de tâche ou interruptions

Les tâches peuvent parfois échouer ou être interrompues. Par exemple:

  • L’application de tâche elle-même peut échouer.
  • Le nœud sur lequel la tâche est en cours d’exécution peut redémarrer.
  • Une opération de redimensionnement peut supprimer le nœud du pool. Cette action peut se produire si la stratégie de désallocation du pool supprime immédiatement les nœuds sans attendre la fin des tâches.

Dans tous les cas, Batch peut renvoyer automatiquement la tâche pour l’exécution sur un autre nœud.

Il est également possible qu’un problème intermittent entraîne l’arrêt de la réponse d’une tâche ou qu’elle prenne trop de temps. Vous pouvez définir un intervalle d’exécution maximal pour une tâche. Si une tâche dépasse l’intervalle, le service Batch interrompt l’application de tâche.

Se connecter à des nœuds de calcul

Vous pouvez effectuer le débogage et la résolution des problèmes en vous connectant à un nœud de calcul à distance. Utilisez le portail Azure pour télécharger un fichier RDP (Remote Desktop Protocol) pour les nœuds Windows et obtenir des informations de connexion SSH (Secure Shell) pour les nœuds Linux. Vous pouvez également télécharger ces informations à l’aide des API Batch .NET ou Batch Python .

Pour vous connecter à un nœud via RDP ou SSH, commencez par créer un utilisateur sur le nœud. Utilisez l’une des méthodes suivantes :

Si nécessaire, configurez ou désactivez l’accès aux nœuds de calcul.

Résoudre les problèmes liés aux nœuds

Votre application ou service client Batch peut examiner les métadonnées des tâches ayant échoué pour identifier un nœud de problème. Chaque nœud d’un pool a un ID unique. Les métadonnées de tâche incluent le nœud dans lequel une tâche s’exécute. Après avoir trouvé le nœud de problème, essayez les méthodes suivantes pour résoudre l’échec.

Nœud de redémarrage

Le redémarrage d’un nœud résout parfois les problèmes latents, tels que les processus bloqués ou bloqués. Si votre pool utilise une tâche de démarrage ou si votre travail utilise une tâche de préparation du travail, un redémarrage de nœud exécute ces tâches.

Réimager le nœud

La réinitialisation d’un nœud réinstalle le système d’exploitation. Démarrez les tâches et les tâches de préparation des travaux à réexécuter une fois la réimation effectuée.

Supprimer le nœud du pool

La suppression du nœud du pool est parfois nécessaire.

Désactiver la planification des tâches sur le nœud

La désactivation de la planification des tâches sur un nœud prend effectivement le nœud hors connexion. Batch n’affecte aucune autre tâche au nœud. Toutefois, le nœud continue à s’exécuter dans le pool. Vous pouvez ensuite examiner plus en détail les échecs sans perdre les données de la tâche ayant échoué. Le nœud ne provoque pas non plus d’échecs de tâches.

Par exemple, désactivez la planification des tâches sur le nœud. Ensuite, connectez-vous au nœud à distance. Examinez les journaux des événements et effectuez d’autres problèmes. Après avoir résolu les problèmes, réactivez la planification des tâches pour rétablir le nœud en ligne.

Vous pouvez utiliser ces actions pour spécifier les tâches batch qui s’exécutent actuellement sur le nœud. Par exemple, lorsque vous désactivez la planification des tâches avec l’API Batch .NET, vous pouvez spécifier une valeur d’énumération pour DisableComputeNodeSchedulingOption. Vous pouvez choisir de :

  • Arrêtez les tâches en cours d’exécution : Terminate
  • Tâches de mise en file d’attente pour la planification sur d’autres nœuds : Requeue
  • Autorisez l’exécution des tâches avant d’effectuer l’action : TaskCompletion

Réessayer après les erreurs

Les API Batch vous informent des échecs. Vous pouvez réessayer toutes les API à l’aide du gestionnaire de nouvelles tentatives global intégré. Il est recommandé d’utiliser cette option.

Après une défaillance, attendez plusieurs secondes avant de réessayer. Si vous réessayez trop fréquemment ou trop rapidement, le gestionnaire de nouvelles tentatives limite les demandes.

Étapes suivantes