Fehlerbehebung

Auf dieser Seite wird beschrieben, wie Sie Probleme mit Batch beheben.

Wenn Sie einen Job beheben möchten, für den Sie keine Fehlermeldung erhalten, prüfen Sie, ob die Statusereignisse für den Job Fehlermeldungen enthalten, bevor Sie dieses Dokument lesen:

  1. Rufen Sie die Jobdetails auf.
  2. Überprüfen Sie das Feld für Statusereignisse:

    • Wenn Sie die Google Cloud Console verwenden, klicken Sie auf den Tab Ereignisse und sehen Sie sich den Abschnitt Ereignisliste an.
    • Wenn Sie die gcloud CLI oder Batch API verwenden, prüfen Sie das Feld statusEvents.

Weitere Informationen zur Fehlerbehebung bei Jobs finden Sie in den folgenden Dokumenten:

Fehler beim Erstellen von Jobs

Wenn Sie einen Job nicht erstellen können, liegt dies möglicherweise an einem der Fehler in diesem Abschnitt.

Unzureichendes Kontingent

Problem

Wenn Sie versuchen, einen Job zu erstellen, tritt eines der folgenden Probleme auf:

  • Wenn der Job den Status QUEUED hat, wird das folgende Problem im Feld statusEvents angezeigt:

    Quota checking process decides to delay scheduling for the job JOB_UID due to inadequate quotas [Quota: QUOTA_NAME, limit: QUOTA_LIMIT, usage: QUOTA_CURRENT_USAGE, wanted: WANTED_QUOTA.].
    

    Dieses Problem weist darauf hin, dass der Job verzögert wurde, da die aktuelle Nutzung (QUOTA_USAGE) und das Limit (QUOTA_LIMIT) des Kontingents QUOTA_NAME die angeforderte Nutzung des Jobs (WANT_QUOTA) verhindert haben.

  • Wenn sich der Job im Status QUEUED, SCHEDULED oder FAILED befindet, wird im Feld statusEvents eines der folgenden Probleme angezeigt:

    RESOURCE_NAME creation failed:
    Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in region REGION
    
    RESOURCE_NAME creation failed:
    Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in zone ZONE
    

    Dieses Problem weist darauf hin, dass das Erstellen einer Ressource fehlgeschlagen ist, weil die Anfrage Ihr Kontingent von QUOTA_NAME überschritten hat, das am angegebenen Standort ein Limit von QUOTA_LIMIT hat.

Lösung

So beheben Sie das Problem:

  • Wenn sich der Job verzögert, warten Sie, bis ein größeres Kontingent freigegeben ist.

  • Wenn der Job aufgrund unzureichender Kontingente fehlgeschlagen ist oder die Verzögerungen weiterhin bestehen, versuchen Sie, ein unzureichendes Kontingent zu verhindern. Gehen Sie dazu so vor:

    • Erstellen Sie Jobs, die weniger von diesem Kontingent oder ein anderes Kontingent verbrauchen. Geben Sie beispielsweise einen anderen zulässigen Standort oder Ressourcentyp für den Job an oder teilen Sie Ihre Kontingentnutzung auf zusätzliche Projekte auf.

    • Fordern Sie bei Google Cloud ein höheres Kontingentlimit für Ihr Projekt an.

Weitere Informationen finden Sie unter Batchkontingente und -limits und Mit Kontingenten arbeiten.

Unzureichende Berechtigungen, um als Dienstkonto zu fungieren

Problem

Das folgende Problem tritt auf, wenn Sie versuchen, einen Job zu erstellen:

  • Wenn für den Job keine Instanzvorlage verwendet wird, sieht das Problem so aus:

    caller does not have access to act as the specified service account: SERVICE_ACCOUNT_NAME
    
  • Wenn der Job eine Instanzvorlage verwendet, tritt das Problem so auf:

    Error: code - CODE_SERVICE_ACCOUNT_MISMATCH, description - The service account specified in the instance template INSTANCE_TEMPLATE_SERVICE_ACCOUNT doesn't match the service account specified in the job JOB_SERVICE_ACCOUNT for JOB_UID, project PROJECT_NUMBER
    

Dieses Problem tritt normalerweise auf, wenn der Nutzer, der den Job erstellt, nicht genügend Berechtigungen hat, um als Dienstkonto zu fungieren, das vom Job verwendet wird. Dies wird durch die Berechtigung iam.serviceAccounts.actAs gesteuert.

Lösung

So beheben Sie das Problem:

  1. Wenn der Job eine Instanzvorlage verwendet, prüfen Sie, ob das in der Instanzvorlage angegebene Dienstkonto mit dem in der Definition des Jobs angegebenen Dienstkonto übereinstimmt.
  2. Achten Sie darauf, dass dem Nutzer, der den Job erstellt, die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das für den Job angegebene Dienstkonto zugewiesen wurde. Weitere Informationen finden Sie unter Zugriff verwalten.
  3. Erstellen Sie den Job neu.

Wiederholte Netzwerke

Problem

Das folgende Problem tritt auf, wenn Sie versuchen, einen Job zu erstellen:

Networks must be distinct for NICs in the same InstanceTemplate

Dieses Problem tritt auf, weil Sie das Netzwerk für einen Job mehrmals angegeben haben.

Lösung

Erstellen Sie den Job neu und geben Sie das Netzwerk mit einer der folgenden Optionen an, um das Problem zu beheben:

Weitere Informationen finden Sie unter Netzwerk für einen Job angeben.

Ungültiges Netzwerk für VPC Service Controls

Problem

Das folgende Problem tritt auf, wenn Sie versuchen, einen Job zu erstellen:

no_external_ip_address field is invalid. VPC Service Controls is enabled for the project, so external ip address must be disabled for the job. Please set no_external_ip_address field to be true

Lösung

Dieses Problem tritt auf, weil Sie versuchen, einen Job mit VMs mit externen IP-Adressen in einem VPC Service Controls-Dienstperimeter zu erstellen und auszuführen.

Erstellen Sie einen Job, der den externen Zugriff für alle VMs blockiert, um das Problem zu beheben.

Weitere Informationen zum Konfigurieren des Netzwerks für einen Job in einem VPC Service Controls-Dienstperimeter finden Sie unter VPC Service Controls mit Batch verwenden.

Jobfehler

Wenn Probleme mit einem Job auftreten, der nicht korrekt ausgeführt wird oder aus unklaren Gründen fehlgeschlagen ist, kann dies an einem der Fehler in diesem Abschnitt oder an einem der Exit-Codes im Abschnitt Taskfehler-Exit-Codes liegen.

Keine Logs in Cloud Logging

Problem

Sie müssen einen Job debuggen, aber in Cloud Logging werden für den Job keine Logs angezeigt.

Dieses Problem tritt häufig aus den folgenden Gründen auf:

  • Die Cloud Logging API ist für Ihr Projekt nicht aktiviert. Auch wenn Sie alles andere für die Logs eines Jobs richtig konfigurieren, werden keine Logs erstellt, wenn der Dienst nicht für Ihr Projekt aktiviert ist.
  • Das Dienstkonto des Jobs ist nicht zum Schreiben von Logs berechtigt. Ein Job kann ohne ausreichende Berechtigungen keine Logs erstellen.
  • Der Job wurde nicht zum Erzeugen von Logs konfiguriert. Damit Logs in Cloud Logging erstellt werden können, muss Cloud Logging für einen Job aktiviert sein. Die Runnables des Jobs sollten außerdem so konfiguriert sein, dass alle Informationen, die in Logs angezeigt werden sollen, in die Standardausgabestreams (stdout) und Standardfehlerstreams (stderr) geschrieben werden. Weitere Informationen finden Sie unter Job mithilfe von Logs analysieren.
  • Aufgaben wurden nicht ausgeführt. Logs können erst erstellt werden, wenn den Aufgaben Ressourcen zugewiesen wurden und diese ausgeführt werden.

Lösung

So beheben Sie das Problem:

  1. Achten Sie darauf, dass die Cloud Logging API für Ihr Projekt aktiviert ist.
  2. Achten Sie darauf, dass das Dienstkonto für den Job die IAM-Rolle Logautor (roles/logging.logWriter) hat. Weitere Informationen finden Sie unter Batch für ein Projekt aktivieren.
  3. Rufen Sie die Details des Jobs über die gcloud CLI oder die Batch API auf. Die Jobdetails können Ihnen helfen zu verstehen, warum der Job keine Logs erstellt hat, und können Informationen enthalten, die Sie aus den Logs erhalten wollten. Beispiel:
    1. Prüfen Sie im Feld logsPolicy des Jobs, ob Logging aktiviert ist.
    2. Prüfen Sie das Feld status des Jobs, um zu prüfen, ob der Job erfolgreich ausgeführt wurde.

Keine Berichterstellung für Dienst-Agents

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt, der nicht ordnungsgemäß ausgeführt wird oder vor dem Erstellen von VMs fehlgeschlagen ist:

No VM has agent reporting correctly within time window NUMBER_OF_SECONDS seconds, VM state for instance VM_NAME is TIMESTAMP,agent,start

Das Problem gibt an, dass keine der VMs eines Jobs eine Meldung an den Batch-Dienst-Agent sendet.

Dieses Problem tritt häufig aus den folgenden Gründen auf:

  • Die VMs des Jobs haben nicht die erforderlichen Berechtigungen. Die VMs eines Jobs benötigen bestimmte Berechtigungen, um ihren Status an den Batch-Dienst-Agent zu melden. Sie können diese Berechtigungen für die VMs eines Jobs erteilen, indem Sie dem Dienstkonto des Jobs die Rolle "Batch Agent Reporter" (roles/batch.agentReporter) zuweisen.
  • Die VMs des Jobs haben Netzwerkprobleme. Die VMs eines Jobs benötigen Netzwerkzugriff, um mit dem Batch-Dienst-Agent zu kommunizieren.
  • Die VMs des Jobs verwenden ein veraltetes Batch VM-Betriebssystem-Image oder ein VM-Betriebssystem-Image mit veralteter Batch-Dienst-Agent-Software. Die VMs des Jobs benötigen Software im VM-Betriebssystem-Image, die die aktuellen Abhängigkeiten für Berichte an den Batch-Dienst-Agent bereitstellt.

Lösung

So beheben Sie das Problem:

  1. Prüfen Sie, ob die VMs des Jobs die erforderlichen Berechtigungen haben, um ihren Status an den Batch-Dienst-Agent zu melden.

    1. Rufen Sie die Details des Jobs mithilfe der gcloud CLI oder Batch API auf, um das Dienstkonto des Jobs zu identifizieren. Wenn kein Dienstkonto aufgeführt ist, verwendet der Job standardmäßig das Compute Engine-Standarddienstkonto.
    2. Prüfen Sie, ob das Dienstkonto des Jobs Berechtigungen für die Rolle „Batch Agent Reporter“ (roles/batch.agentReporter) hat. Weitere Informationen finden Sie unter Zugriff verwalten und Dienstkontonutzung einschränken.

      Verwenden Sie beispielsweise den folgenden Befehl, um dem Compute Engine-Standarddienstkonto die erforderlichen Berechtigungen zu gewähren:

      gcloud projects add-iam-policy-binding \
        --role roles/batch.agentReporter \
        --member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com
      

      Ersetzen Sie PROJECT_NUMBER durch Ihre Projektnummer.

  2. Prüfen Sie, ob die VMs des Jobs ordnungsgemäßen Netzwerkzugriff haben. Weitere Informationen finden Sie unter Batch-Netzwerkübersicht und Häufige Netzwerkprobleme beheben.

  3. Wenn Sie das VM-Betriebssystem-Image für den Job angegeben haben, prüfen Sie, ob das VM-Betriebssystem-Image derzeit unterstützt wird.

    1. Wenn Sie Cloud Logging für den Job aktiviert haben, können Sie dieses Problem ermitteln. Suchen Sie dazu nach einem der folgenden Agent-Logs (batch_agent_logs). Weitere Informationen finden Sie unter Job mithilfe von Logs analysieren.

      • Log für einen veralteten Softwarefehler des Batch-Dienst-Agents:

        rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_AGENT_VERSION: outdated Batch agent version used.
        

        BATCH_AGENT_VERSION ist die Softwareversion zur Kommunikation mit dem Batch-Dienst-Agent, den der Job verwendet, z. B. cloud-batch-agent_20221103.00_p00.

      • Log für Fehler aufgrund eines veralteten Batch-VM-Betriebssystem-Images:

        rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_VM_OS_IMAGE_NAME: outdated Batch image version.
        

        Die BATCH_VM_OS_IMAGE_NAME ist die spezifische Version eines VM-Betriebssystem-Images aus Batch, das der Job verwendet, z. B. batch-debian-11-20220909-00-p00.

    2. Sie können dieses Problem mit einem neueren VM-Betriebssystem-Image beheben. Wenn der Job ein benutzerdefiniertes Image verwendet, erstellen Sie das benutzerdefinierte Image anhand der neuesten Version eines unterstützten öffentlichen Images neu.

      Weitere Informationen finden Sie unter Unterstützte VM-Betriebssystem-Images und VM-Betriebssystem-Images ansehen.

  4. Erstellen Sie den Job neu.

Verstoß gegen Einschränkung für externe IP-Adressen der VM

Problem

Das folgende Problem wird im Feld statusEvents für einen fehlgeschlagenen Job angezeigt:

Instance VM_NAME creation failed: Constraint constraints/compute.vmExternalIpAccess violated for project PROJECT_NUMBER.
Add instance VM_NAME to the constraint to use external IP with it.

Dieses Problem tritt auf, weil Ihr Projekt, Ihr Ordner oder Ihre Organisation die Einschränkung der Organisationsrichtlinie compute.vmExternalIpAccess so festgelegt hat, dass nur VMs auf der Zulassungsliste externe IP-Adressen verwenden können.

Lösung

Erstellen Sie den Job neu und führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

Verstoß gegen Einschränkung für vertrauenswürdige Images

Problem

Das folgende Problem wird im Feld statusEvents für einen fehlgeschlagenen Job angezeigt:

Instance VM_NAME creation failed: Constraint constraints/compute.trustedImageProjects violated for project PROJECT_ID. Use of images from project batch-custom-image is prohibited.

Lösung

Dieses Problem tritt auf, weil in Ihrem Projekt die Richtlinieneinschränkung für vertrauenswürdige Images (compute.trustedImageProjects) so festgelegt wurde, dass Images aus Batch, die sich im Image-Projekt batch-custom-image befinden, nicht zulässig sind.

Führen Sie mindestens einen der folgenden Schritte aus, um das Problem zu beheben:

  • Erstellen Sie den Job neu, um ein VM-Betriebssystem-Image anzugeben, das bereits durch die Einschränkung der Richtlinie für vertrauenswürdige Images zugelassen ist.
  • Bitten Sie Ihren Administrator, die Änderung der Richtlinieneinschränkung für vertrauenswürdige Images so zu erlauben, dass VM-Betriebssystem-Images aus dem Projekt batch-custom-image-Images zugelassen werden. Eine Anleitung dazu finden Sie unter Zugriff auf VM OS-Images für Batch steuern.

Der Job ist beim Verwenden einer Instanzvorlage fehlgeschlagen

Problem

Das folgende Problem tritt im Feld statusEvents für einen fehlgeschlagenen Job auf, der eine Instanzvorlage verwendet:

INVALID_FIELD_VALUE,BACKEND_ERROR

Dieses Problem tritt aufgrund unklarer Probleme mit der Instanzvorlage des Jobs auf.

Lösung

So beheben Sie das Problem:

  1. Erstellen Sie eine MIG mit der Instanzvorlage und beobachten Sie mit weiteren Details, ob Fehler auftreten.
  2. Optional: Weitere Informationen finden Sie unter Vorgang mit langer Ausführungszeit, mit dem die MIG in der Google Cloud Console erstellt wird.

    Zu Compute Engine Operations

Exit-Codes für Aufgabenfehler

Wenn eine bestimmte Aufgabe in einem Job fehlschlägt, gibt sie einen Exit-Code ungleich null zurück. Je nachdem, wie Sie das Feld ignoreExitStatus konfigurieren, kann eine fehlgeschlagene Aufgabe zum Fehlschlagen eines Jobs führen.

Zusätzlich zu den Exit-Codes, die Sie in einem Runnable definieren, hat ein Batch mehrere reservierte Exit-Codes, einschließlich der folgenden.

VM vorzeitig beenden (50001)

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt:

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Spot Preemption with exit code 50001.

Dieses Problem tritt auf, wenn eine Spot-VM für den Job während der Laufzeit vorzeitig beendet wird.

Lösung

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

  • Sie können die Aufgabe entweder mit automatisierten Aufgabenwiederholungen oder manuell noch einmal ausführen.
  • Verwenden Sie stattdessen VMs mit dem Standardbereitstellungsmodell, um sicherzustellen, dass kein vorzeitiges Beenden erfolgt.

Zeitlimit für VM-Berichterstellung (50002)

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt:

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Batch no longer receives VM updates with exit code 50002.

Dieses Problem tritt auf, wenn eine Zeitüberschreitung im Back-End dazu geführt hat, dass eine VM für den Job keine Updates mehr erhält.

Lösung

Wiederholen Sie zum Beheben dieses Problems die Aufgabe entweder mit automatisierten Aufgabenwiederholungen oder manuell noch einmal.

VM während der Ausführung neu gestartet (50003)

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt:

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to VM is rebooted during task execution with exit code 50003.

Dieses Problem tritt auf, wenn eine VM für einen Job während der Laufzeit unerwartet neu gestartet wird.

Lösung

Wiederholen Sie zum Beheben dieses Problems die Aufgabe entweder mit automatisierten Aufgabenwiederholungen oder manuell noch einmal.

VM und Aufgabe reagieren nicht (50004)

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt:

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to tasks cannot be canceled with exit code 50004.

Dieses Problem tritt auf, wenn eine Aufgabe das Zeitlimit für die Nichtreaktion erreicht und nicht abgebrochen werden kann.

Lösung

Wiederholen Sie zum Beheben dieses Problems die Aufgabe entweder mit automatisierten Aufgabenwiederholungen oder manuell noch einmal.

Aufgabe wird über die maximale Laufzeit ausgeführt (50005)

Problem

Das folgende Problem wird im Feld statusEvents für einen Job angezeigt:

Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to task runs over the maximum runtime with exit code 50005.

Dieses Problem tritt auf, wenn die Ausführungszeit einer Aufgabe das im Feld maxRunDuration angegebene Zeitlimit überschreitet.

Lösung

Prüfen Sie, wie lange es dauert, bis die einzelnen Aufgaben ausgeführt werden, um das Problem zu beheben. Führen Sie anschließend einen der folgenden Schritte aus:

  • Wenn Sie diesen Fehler nur gelegentlich erwarten, z. B. bei einer Aufgabe mit einer uneinheitlichen Laufzeit, können Sie versuchen, den Job neu zu erstellen und ihn so zu konfigurieren, dass Aufgabenwiederholungen automatisiert werden, um die Erfolgsquote zu erhöhen.

  • Wenn für die Ausführung von Aufgaben durchweg mehr Zeit benötigt wird, als das Zeitlimit im Feld maxRunDuration zulässt, erstellen Sie den Job neu und erhöhen Sie den Wert des Felds maxRunDuration oder entfernen Sie es.

Nächste Schritte