Fehlerbehandlung und -erkennung in Azure Batch

Manchmal müssen Sie möglicherweise Aufgaben- und Anwendungsfehler in Ihrer Azure Batch-Lösung behandeln. In diesem Artikel werden verschiedene Arten von Batch-Fehlern und das Beheben gängiger Probleme erläutert.

Fehlercodes

Es gibt einige allgemeine Fehlertypen, die in Batch auftreten können:

  • Netzwerkfehler bei Anforderungen, die Batch niemals erreicht haben, oder wenn die Batch-Antwort den Client nicht rechtzeitig erreicht.
  • Interne Serverfehler Diese Fehler verfügen über eine standardmäßige 5xx HTTP-Statuscodeantwort.
  • Drosselungsbezogene Fehler Zu diesen Fehlern gehören http-Antworten mit dem Statuscode 429 oder 503 und dem Header Retry-after.
  • 4xx-Fehler wie AlreadyExists und InvalidOperation Diese Fehler deuten darauf hin, dass sich die Ressource nicht im richtigen Zustand für den Statusübergang befindet.

Ausführliche Informationen zu bestimmten Fehlercodes finden Sie unter Status- und Fehlercodes für Batch. Diese Referenz enthält Fehlercodes für REST-API, Batch-Dienst und Auftragsaufgaben und -zeitplanung.

Anwendungsfehler

Während der Ausführung kann eine Anwendung eine Diagnoseausgabe erzeugen. Sie können diese Ausgabe verwenden, um Probleme zu beheben. Der Batch-Dienst schreibt eine Standardausgabe und eine Standardfehlerausgabe in die Dateien stdout.txt und stderr.txt im Taskverzeichnis auf dem Computeknoten. Weitere Informationen finden Sie unter Dateien und Verzeichnisse in Batch.

Diese Dateien können Sie über das Azure-Portal oder über ein Batch SDK herunterladen. Diese Dateien rufen Sie mithilfe von ComputeNode.GetNodeFile und CloudTask.GetNodeFile in der Batch-Bibliothek für .NET zu Problembehandlungszwecken ab.

Taskfehler

Taskfehler lassen sich in verschiedene Kategorien unterteilen.

Fehler bei der Vorverarbeitung

Falls ein Task nicht gestartet werden kann, wird für den Task ein Fehler bei der Vorverarbeitung festgelegt. Fehler bei der Vorverarbeitung können auftreten, wenn:

  • Die Ressourcendateien der Aufgabe verschoben wurden.
  • Das Speicherkonto nicht mehr verfügbar ist.
  • Ein weiteres Problem passiert ist, das das erfolgreiche Kopieren von Dateien auf den Knoten verhindert hat.

Fehler bei Hochladen von Dateien

Falls für einen Task angegebene Dateien nicht hochgeladen werden können, wird für den Task ein Fehler beim Hochladen von Dateien gemeldet. Dateiuploadfehler können auftreten, wenn:

  • Das SAS-Token (Shared Access Signature), das für den Zugriff auf Azure Storage bereitgestellt wird, ungültig ist.
  • Das SAS-Token keine Schreibberechtigungen zur Verfügung stellt.
  • Das Speicherkonto nicht mehr verfügbar ist.
  • Ein weiteres Problem passiert ist, das das erfolgreiche Kopieren von Dateien auf den Knoten verhindert hat.

Anwendungsfehler

Ein Fehler kann auch beim in der Befehlszeile des Tasks angegebenen Prozess auftreten. Weitere Informationen finden Sie unter Task-Exitcodes.

Konfigurieren Sie Batch so, dass der Task im Fall eines Anwendungsfehlers automatisch mit einer bestimmten Häufigkeit wiederholt wird.

Einschränkungsfehler

Mit der Einschränkung maxWallClockTime geben Sie die maximale Ausführungsdauer für einen Auftrag oder Task an. Verwenden Sie diese Einstellung, um Aufgaben zu beenden, die nicht weiterkommen.

Wenn der Task die maximale Zeit überschreitet:

  • Wird der Task als abgeschlossen markiert.
  • Wird der Exitcode auf 0xC000013A festgelegt.
  • Wird das Feld schedulingError als { category:"ServerError", code="TaskEnded"} markiert.

Exitcodes für Tasks

Wenn ein Task einen Prozess ausführt, füllt Batch die Exitcodeeigenschaft des Tasks mit dem Rückgabecode des Prozesses auf. Wenn der Prozess einen Exitcode ungleich 0 (null) zurückgibt, markiert der Batch-Dienst den Task als fehlgeschlagen.

Der Batch-Dienst bestimmt nicht den Exitcode einer Aufgabe. Der Exitcode eines Tasks wird vom Prozess selbst oder von dem Betriebssystem bestimmt, unter dem der Prozess ausgeführt wird.

Taskfehler oder -unterbrechungen

Tasks werden gelegentlich nicht erfolgreich ausgeführt oder unterbrochen. Beispiel:

  • Die Taskanwendung selbst kann fehlschlagen.
  • Der Knoten, auf dem der Task ausgeführt wird, kann neu gestartet werden.
  • Bei einem Größenänderungsvorgang wird der Knoten möglicherweise aus dem Pool entfernt. Diese Aktion kann passieren, wenn die Freigaberichtlinie des Pools Knoten sofort entfernt, ohne auf den Abschluss der Aufgaben zu warten.

In jedem Fall kann Batch die Aufgabe automatisch zur Ausführung auf einem anderen Knoten in die Warteschlange stellen.

Außerdem können zeitweilig Probleme auftreten, die dazu führen, dass ein Task nicht mehr reagiert oder zu lange dauert. Sie können ein maximales Ausführungsintervall für einen Task festlegen. Wenn ein Task das Intervall überschreitet, unterbricht der Batch-Dienst die Taskanwendung.

Herstellen einer Verbindung mit Computeknoten

Sie können Debug- und Problembehandlungsmaßnahmen durchführen, indem Sie sich per Remotezugriff bei einem Computeknoten anmelden. Verwenden Sie das Azure-Portal, um eine RDP-Datei (Remotedesktopprotokoll) für Windows-Knoten herunterzuladen und Secure Shell (SSH)-Verbindungsinformationen für Linux-Knoten abzurufen. Sie können diese Informationen mit den APIs Batch .NET oder Batch Python herunterladen.

Erstellen Sie zuerst einen Benutzer auf dem Knoten, um über RDP oder SSH eine Verbindung mit einem Knoten herzustellen. Verwenden Sie eine der folgenden Methoden:

Bei Bedarf können Sie den Zugriff auf Computeknoten konfigurieren oder deaktivieren.

Problembehandlung bei Knoten

Ihre Batch-Clientanwendung oder der Batch-Clientdienst kann die Metadaten fehlgeschlagener Aufgaben überprüfen, um einen Problemknoten zu identifizieren. Jeder Knoten in einem Pool verfügt über eine eindeutige ID. Taskmetadaten enthalten den Knoten, auf dem ein Task ausgeführt wird. Nachdem Sie den Problemknoten gefunden haben, probieren Sie die folgenden Methoden aus, um den Fehler zu beheben.

Knoten neu starten

Beim Neustart eines Knotens werden manchmal latente Probleme behoben, z. B. hängende oder abgestürzte Prozesse. Wenn Ihr Pool ein Starttask nutzt oder der Auftrag ein Auftragsvorbereitungstask nutzt, werden diese Tasks beim Neustart des Knotens ausgeführt.

Reimaging für Knoten ausführen

Durch das Reimaging eines Knotens wird das Betriebssystem neu installiert. Starten Sie Tasks und Auftragsvorbereitungstasks, die nach dem Reimaging erneut ausgeführt werden.

Entfernen eines Knotens aus dem Pool

Manchmal ist es erforderlich, den Knoten aus dem Pool zu entfernen.

Taskplanung auf dem Knoten deaktivieren

Wenn Sie die Taskplanung auf einem Knoten deaktivieren, wird der Knoten praktisch offline geschaltet. Batch weist dem Knoten keine weiteren Tasks zu. Der Knoten wird jedoch weiterhin im Pool ausgeführt. Anschließend können Sie die Fehler weiter untersuchen, ohne die Daten des fehlgeschlagenen Tasks zu verlieren. Der Knoten verursacht auch keine weiteren Taskfehler.

Zum Beispiel Deaktivieren der Taskplanung auf dem Knoten Melden Sie sich dann remote beim Knoten an. Untersuchen Sie die Ereignisprotokolle, und nehmen Sie weitere Problembehandlungen vor. Nachdem Sie die Probleme gelöst haben, aktivieren Sie die Taskplanung erneut, um den Knoten wieder online zu bringen.

Sie können diese Aktionen verwenden, um Tasks anzugeben, die Batch aktuell auf dem Knoten ausführt. Wenn Sie beispielsweise die Taskplanung mit der Batch .NET-API deaktivieren, können Sie einen Enum-Wert für DisableComputeNodeSchedulingOption angeben. Sie haben folgende Möglichkeiten:

  • Derzeit ausgeführte Tasks beenden: Terminate
  • Tasks für die Zeitplanung auf anderen Knoten erneut in die Warteschlange setzen: Requeue
  • Ausführung von Tasks zulassen, bevor die Aktion ausgeführt wird: TaskCompletion

Retry-After-Fehler

Die Batch-APIs benachrichtigen Sie über Fehler. Sie können alle APIs mithilfe des integrierten globalen Wiederholungshandlers wiederholen. Diese Option ist eine bewährte Methode.

Warten Sie nach einem Fehler einige Sekunden, bevor Sie den Vorgang wiederholen. Wenn Wiederholungsversuche zu häufig oder zu schnell erfolgen, drosselt der Wiederholungshandler die Anforderungen.

Nächste Schritte