Freigeben über


Fehler bei Azure Batch-Aufträgen und -Tasks

Beim Hinzufügen, Planen oder Ausführen von Azure Batch-Aufträgen und -Tasks können verschiedene Fehler auftreten. Es ist einfach, Fehler zu erkennen, die beim Hinzufügen von Aufträgen und Tasks auftreten. Die API, Befehlszeile oder Benutzeroberfläche gibt in der Regel alle Fehler sofort zurück. Dieser Artikel befasst sich mit der Suche nach Fehlern, die nach der Übermittlung von Aufträgen und Tasks auftreten, sowie mit deren Behandlung.

Auftragsfehler

Ein Auftrag ist eine Gruppe eines oder mehrerer Tasks, die die auszuführenden Befehlszeilen angeben. Sie können die folgenden optionalen Parameter angeben, wenn Sie einen Auftrag hinzufügen. Diese Parameter beeinflussen, wie der Auftrag fehlschlagen kann.

  • JobConstraints. Sie können optional die Eigenschaft maxWallClockTime verwenden, um die maximale Zeitspanne festzulegen, die ein Auftrag aktiv sein oder ausgeführt werden kann. Wenn der Auftrag maxWallClockTime überschreitet, wird die Eigenschaft terminateReason in JobExecutionInformation auf MaxWallClockTimeExpiry festgelegt und der Auftrag beendet.

  • JobPreparationTask. Optional können Sie einen Auftragsvorbereitungstask angeben, der auf jedem Computeknoten ausgeführt werden soll, für den die Ausführung eines Auftragstasks geplant ist. Der Knoten führt den Auftragsvorbereitungstask aus, bevor er einen Task für den Auftrag zum ersten Mal ausführt. Wenn der Auftragsvorbereitungstask fehlschlägt, wird der Task nicht ausgeführt, und der Auftrag wird nicht abgeschlossen.

  • JobReleaseTask. Optional können Sie einen Auftragsfreigabetask für Aufträge angeben, die über einen Auftragsvorbereitungstask verfügen. Wird ein Auftrag beendet, wird der Auftragsfreigabetask auf jedem Poolknoten ausgeführt, auf dem ein Auftragsvorbereitungstask ausgeführt wurde. Wenn ein Auftragsfreigabetask fehlschlägt, wechselt der Auftrag trotzdem in den Status „completed“.

Im Azure-Portal können Sie diese Parameter in den Abschnitten Auftrags-Manager, Vorbereitungs- und Freigabetasks sowie Erweitert des Azure Batch-Bildschirms Auftrag hinzufügen festlegen.

Auftragseigenschaften

Überprüfen Sie die folgenden Auftragseigenschaften in JobExecutionInformation auf Fehler:

  • Die Eigenschaft terminateReason gibt MaxWallClockTimeExpiry an, ob der Auftrag den in den Auftragseinschränkungen festgelegten maxWallClockTime-Wert überschreitet und der Auftrag daher beendet wurde. Diese Eigenschaft kann auch auf taskFailed festgelegt werden, wenn das Attribut onTaskFailure des Auftrags auf performExitOptionsJobAction festgelegt ist und ein Task mit einer Exitbedingung fehlschlägt, die eine jobAction von terminatejob angibt.

  • Die Eigenschaft JobSchedulingError wird festgelegt, wenn ein Zeitplanungsfehler aufgetreten ist.

Task zur Auftragsvorbereitung

Auf jedem Computeknoten wird eine Instanz eines Auftragsvorbereitungstasks ausgeführt, wenn der Knoten zum ersten Mal einen Task für den Auftrag ausführt. Den Auftragsvorbereitungstask können Sie sich als Taskvorlage vorstellen, wobei mehrere Instanzen bis zur Anzahl der Knoten in einem Pool ausgeführt werden. Überprüfen Sie die Instanzen des Auftragsvorbereitungstasks, um festzustellen, ob Fehler aufgetreten sind.

Sie können die API Auftrag – Auflisten des Status von Vorbereitungs- und Freigabetasks verwenden, um den Ausführungsstatus aller Instanzen von Auftragsvorbereitungs- und Freigabetasks für einen angegebenen Auftrag aufzulisten. Wie bei anderen Tasks ist JobPreparationTaskExecutionInformation mit Eigenschaften wie failureInfo, exitCode und result verfügbar.

Wird ein Auftragsvorbereitungstask ausgeführt, wird der Task, der den Auftragsvorbereitungstask ausgelöst hat, in den taskStatepreparing“ versetzt. Wenn der Auftragsvorbereitungstask fehlschlägt, wird der auslösende Task in den Status „active“ zurückgesetzt und nicht ausgeführt.

Wenn ein Auftragsvorbereitungstask fehlschlägt, wird der auslösende Auftragstask nicht ausgeführt. Der Auftrag wird nicht abgeschlossen und bleibt hängen. Wenn es keine anderen Aufträge mit Tasks gibt, die geplant werden können, wird der Pool möglicherweise nicht verwendet.

Tasks zur Auftragsfreigabe

Wird der Auftrag beendet, wird eine Instanz des Auftragsfreigabetasks auf jedem Knoten ausgeführt, auf dem ein Auftragsvorbereitungstask ausgeführt wurde. Überprüfen Sie die Instanzen des Auftragsfreigabetasks, um festzustellen, ob Fehler aufgetreten sind.

Sie können die API Auftrag – Auflisten des Status von Vorbereitungs- und Freigabetasks verwenden, um den Ausführungsstatus aller Instanzen von Auftragsvorbereitungs- und Freigabetasks für einen angegebenen Auftrag aufzulisten. Wie bei anderen Tasks ist JobReleaseTaskExecutionInformation mit Eigenschaften wie failureInfo, exitCode und result verfügbar.

Wenn mindestens ein Auftragsfreigabetask fehlschlägt, wird der Auftrag dennoch beendet und wechselt in den Status „completed“.

Taskfehler

Bei Auftragstasks können aus folgenden Gründen Fehler auftreten:

  • Die Taskbefehlszeile schlägt fehl und gibt einen Exitcode ungleich NULL zurück.
  • Mindestens eine für einen Task angegebene resourceFiles wird nicht heruntergeladen.
  • Mindestens eine für einen Task angegebene outputFiles wird nicht hochgeladen.
  • Die verstrichene Zeit für den Task überschreitet die in TaskConstraints angegebene maxWallClockTime-Eigenschaft.

In allen Fällen müssen Sie die folgenden Eigenschaften auf Fehler und Informationen zu den Fehlern überprüfen:

  • Die Eigenschaft TaskExecutionInformation enthält mehrere Eigenschaften, die Informationen zu einem Fehler bereitstellen. taskExecutionResult gibt an, ob der Task aus einem bestimmten Grund fehlgeschlagen ist, wobei exitCode und failureInfo weitere Informationen zum Fehler bereitstellen.

  • Der Task wechselt immer in den TaskStatecompleted“, unabhängig davon, ob er erfolgreich war oder nicht.

Berücksichtigen Sie die Auswirkungen von Taskfehlern auf den Auftrag und alle Taskabhängigkeiten. Sie können ExitConditions angeben, um Aktionen für Abhängigkeiten und für den Auftrag zu konfigurieren.

  • DependencyAction steuert, ob Tasks, die von dem fehlerhaften Task abhängen, blockiert oder ausgeführt werden.
  • JobAction steuert, ob der fehlerhafte Task dazu führt, dass der Auftrag deaktiviert, beendet oder unverändert gelassen wird.

Taskbefehlszeilen

Taskbefehlszeilen laufen nicht unter einer Shell auf Computeknoten, sodass sie Shellfeatures wie die Erweiterung von Umgebungsvariablen nicht nativ verwenden können. Um solche Features nutzen zu können, muss das Aufrufen der Shell an der Befehlszeile erfolgen. Weitere Informationen finden Sie unter Befehlszeilenerweiterung von Umgebungsvariablen.

Die Taskbefehlszeilen-Ausgabe schreibt in stderr.txt- und stdout.txt-Dateien. Ihre Anwendung schreibt möglicherweise auch in anwendungsspezifische Protokolldateien. Stellen Sie sicher, dass Sie eine umfassende Fehlerüberprüfung für Ihre Anwendung implementieren, um Probleme sofort zu erkennen und zu diagnostizieren.

Aufgabenprotokolle

Wenn der Poolknoten, auf dem ein Task ausgeführt wurde, noch vorhanden ist, können Sie die Taskprotokolldateien abrufen und anzeigen. Mehrere APIs ermöglichen das Auflisten und Abrufen von Taskdateien, z. B Datei – Abrufen aus Task. Sie können Protokolldateien für einen Task oder Knoten auch im Azure-Portal auflisten und anzeigen.

  1. Wählen Sie oben auf der Seite Übersicht für einen Pool Batchprotokolle hochladenaus.

    Screenshot: Seite „Übersicht“ für einen Pool mit hervorgehobener Option „Batchprotokolle hochladen“.

  2. Wählen Sie auf der Seite Azure Batch-Protokolle hochladen die Option Speichercontainer auswählen und dann einen Azure Storage-Container aus, in den Sie die Protokolle hochladen möchten. Wählen Sie anschließend Upload starten aus.

    Screenshot: Seite „Batchprotokolle hochladen“.

  3. Sie können die Protokolle auf der Seite des Speichercontainers anzeigen, öffnen oder herunterladen.

    Screenshot: Erstellen von Taskprotokollen in einem Speichercontainer.

Ausgabedateien

Da Azure Batch-Pools und Poolknoten häufig kurzlebig sind und Knoten kontinuierlich hinzugefügt und gelöscht werden, empfiehlt es sich, die Protokolldateien zu speichern, während der Auftrag ausgeführt wird. Taskausgabedateien sind eine bequeme Möglichkeit, Protokolldateien in Azure Storage zu speichern. Weitere Informationen finden Sie unter Beibehalten von Taskdateien mithilfe der Batch-Dienst-API in Azure Storage.

Bei jedem Dateiupload schreibt Azure Batch zwei Protokolldateien in den Computeknoten: fileuploadout.txt und fileuploaderr.txt. Sie können diese Protokolldateien überprüfen, um weitere Informationen zu einem bestimmten Fehler zu erhalten. Wenn nie versucht wurde, die Datei hochzuladen, da z. B. der Task selbst nicht ausgeführt werden konnte, sind diese Protokolldateien nicht vorhanden.

Nächste Schritte