Laufzeiten für Tasks und Runnables durch Zeitlimits begrenzen

In diesem Dokument wird beschrieben, wie Sie die Laufzeiten von Tasks und Runnables durch Zeitlimits begrenzen können.

Ein Zeitlimit gibt den Zeitraum an, in dem eine Task oder ein ausführbares Objekt ausgeführt werden darf. Als Batch können Jobs nicht länger als 14 Tage ausgeführt werden und es werden keine Standardzeitlimits für einzelne Aufgaben und Runnables festgelegt. Daher kann eine einzelne Aufgabe oder eine einzelne ausführbare Datei bis zu 14 Tage bis zum automatischen Fehler ausgeführt werden. Wenn Ihre Tasks und Runnables jedoch nicht so lange ausgeführt werden sollen, kann diese Konfiguration zu unerwarteten Kosten und Verzögerungen führen. Um übermäßige Ausführungszeiten zu vermeiden, können Sie Zeitlimits für Tasks und Runnables festlegen.

Hinweise

Zeitlimits festlegen

Sie können Zeitlimits für Runnables, Tasks oder beides festlegen. Das Zeitlimit für ein Runnable gibt die maximale Laufzeit für dieses Runnable an. Das Zeitlimit für eine Task gibt die maximale Laufzeit für diese Task an, also die Summe aller einzelnen Ausführungszeiten ihrer Runnables. Wenn eine Task beispielsweise drei Runnables hat, die alle eine Minute lang gleichzeitig ausgeführt werden, beträgt die Laufzeit der Task 3 Minuten, nicht 1 Minute.

Wenn Sie sich überschneidende Zeitlimits festlegen, z. B. ein Zeitlimit für ein Runnable und die Task des Runnables, muss nur ein Zeitlimit überschritten werden, um einen automatischen Fehler auszulösen. Angenommen, Sie legen das Zeitlimit einer Aufgabe auf 60 Sekunden und das Zeitlimit jedes Runnables dieser Aufgabe auf 120 Sekunden fest. Dann schlagen diese Beispielaufgabe und alle zugehörigen Runnables fehl, wenn die Summe der Laufzeiten ihrer Runnables 60 Sekunden überschreitet und die 120-Sekunden-Zeitüberschreitungen nicht ausgelöst werden können.

Zur Auswahl des passenden Zeitlimits für die Tasks und Runnables des Jobs analysieren Sie die Logs ähnlicher Jobs, die Sie zuvor ausgeführt haben, um die typische Laufzeit für Tasks und Runnables für ähnliche Arbeitslasten zu ermitteln.

Zeitlimit für eine Aufgabe festlegen

Verwenden Sie die Google Cloud CLI oder die REST API, um einen Job zu erstellen, der das Feld maxRunDuration im taskSpec-Objekt der JSON-Datei enthält:

{
    "taskGroups": [
      {
        "taskSpec": {
          ...
          "maxRunDuration": "TIMEOUT"
        }
      }
    ]
}

Ersetzen Sie TIMEOUT durch die maximale Anzahl von Sekunden oder Bruchteilen, für die die Aufgabe ausgeführt werden soll. Beispiel: 255s.

Ein Job, der ein Zeitlimit von 255 Sekunden für eine Aufgabe festlegt, hat eine JSON-Konfigurationsdatei ähnlich der folgenden:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              }
            }
          ],
          "maxRunDuration": "255s"
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Wenn das Zeitlimit für eine Aufgabe überschritten wird, schlägt die Aufgabe automatisch fehl. Das überschrittene Zeitlimit wird durch den Exit-Code 50005 in den Statusereignissen und Logs des Jobs angegeben. Weitere Informationen zu überschrittenen Zeitüberschreitungen finden Sie in der Dokumentation zur Fehlerbehebung für Exit-Code 50005.

Zeitlimit für ein Runnable festlegen

Verwenden Sie die Google Cloud CLI oder die REST API, um einen Job zu erstellen, der das Feld timeout im runnable-Objekt der JSON-Datei enthält:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              ...
              "timeout": "TIMEOUT"
            }
          ]
        }
      }
    ]
}

Ersetzen Sie TIMEOUT durch die maximale Anzahl von Sekunden oder Bruchteilen, für die das Runnable ausgeführt werden soll. Beispiel: 3.5s

Ein Job, der ein Zeitlimit von 3,5 Sekunden für ein Runnable festlegt, hat eine JSON-Konfigurationsdatei ähnlich der folgenden:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              },
              "timeout": "3.5s"
            }
          ]
        },
        "taskCount": 3
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Wenn das Zeitlimit für ein Runnable überschritten wird, schlägt das Runnable automatisch fehl. Das überschrittene Zeitlimit wird durch den Exit-Code 50005 in den Statusereignissen und Logs des Jobs angegeben. Weitere Informationen zu überschrittenen Zeitüberschreitungen finden Sie in der Dokumentation zur Fehlerbehebung für Exit-Code 50005.

Nächste Schritte