Debugging von Jobs

Verwenden Sie die Tipps zur Fehlerbehebung, um zu erfahren, wie Sie IBM Cloud® Code Engine Jobs und Ausführungen Ihres Jobs beheben können.

Zu beachtende Jobgrenzen

Die maximale Anzahl Jobs, die pro Projekt pro Projekt ausgeführt werden können, ist 100. Sie sind auf insgesamt 100 Jobausführungen pro Projekt beschränkt, bevor Sie alte Jobs entfernen oder bereinigen müssen.

Weitere Informationen zu Begrenzungen für Jobs, einschließlich Speicher und CPU, finden Sie unter Grenzwerte und Kontingente für Code Engine.

Über die CLI können Sie den Befehl ibmcloud ce project get verwenden, um Informationen zu Grenzwerten und zur aktuellen Nutzung anzuzeigen. Zum Beispiel:

ibmcloud ce project get --name myproject

Beispielausgabe

Getting project 'myproject'...
OK
Name:                                      myproject
ID:                         abcdabcd-abcd-abcd-abcd-f1de4aab5d5d
Status:                                    active
Enabled:                                   true
Application Private Visibility Supported:  true
Selected:                                  true
Region:                                    us-south
Resource Group:             default
Service Binding Service ID: ServiceId-1234abcd-abcd-abcd-1111-1a2b3c4d5e6f
Age:                        52d
Created:                                   Tue, 28 Sep 2021 05:12:16 -0500
Updated:                                   Tue, 28 Sep 2021 05:12:19 -0500
Quotas:
Category                                  Used  Limit
App revisions                             2    120
Apps                                      1     40
Build runs                                1     100
Builds                                    2     100
Configmaps                                2     100
CPU                                       0     128
Ephemeral storage                         0     512G
Functions                                 0     20
Instances (active)                        0     250
Instances (total)                         0     2500
Job runs                                 13     100
Jobs                                      2     100
Memory                                    0     512G
Secrets                                   6     100
Subscriptions (cron)                      0     100
Subscriptions (IBM Cloud Object Storage)  0     100
Subscriptions (Kafka)                     0     100

Protokolle für meine Jobs abrufen

Protokolle können hilfreich sein, um Probleme bei der Ausführung von Jobs zu beheben. Sie können Jobprotokolle über die Konsole oder über die Befehlszeilenschnittstelle anzeigen.

Wenn Sie Protokolle über die Konsole anzeigen, müssen Sie eine IBM Cloud Logs Instanz in derselben Region wie Ihr Code Engine -Projekt erstellen. Es ist nicht erforderlich, diese Instanz zu erstellen, bevor Sie mit Ihrem Code Engine-Job arbeiten. Code Engine vereinfacht die Aktivierung der Protokollierung für Ihre Jobs. Sie können Jobprotokolle anzeigen, nachdem Sie Protokollierungsfunktionen hinzugefügt haben. Weitere Informationen finden Sie im Abschnitt zum Anzeigen von Jobprotokollen in der Konsole.

Wenn Sie mit der CLI arbeiten, können Sie Protokolle aller Instanzen Ihres aktiven Jobs oder Protokolle einer bestimmten Instanz Ihres Jobs anzeigen.

  1. Verwenden Sie den Befehl ibmcloud ce jobrun list, um alle definierten Jobausführungen aufzulisten; zum Beispiel:

    ibmcloud ce jobrun list
    
  2. Verwenden Sie den Befehl ibmcloud ce jobrun get, um die Details der Jobausführung abzurufen, einschließlich des Namens der Instanzen für die Jobausführung; Beispiel:

    ibmcloud ce jobrun get --name myjobrun
    

    Beispielausgabe

    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    Getting events of jobrun 'myjobrun'...
    Run 'ibmcloud ce jobrun events -n myjobrun' to get the system events of the job run instances.
    Run 'ibmcloud ce jobrun logs -f -n myjobrun' to follow the logs of the job run instances.
    OK
    Name:          myjobrun
    [...]
    Created:       2021-03-03T14:47:04-05:00
    Image:                icr.io/codeengine/firstjob
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    Runtime:
        Mode:                  task
        Array Indices:         1 - 4
        Array Size:            4
        JOP_ARRAY_SIZE Value:  4
        Max Execution Time:    7200
        Retry Limit:           3
    Status:
        Completed:          28m
        Instance Statuses:
        Succeeded:  4
        Conditions:
        Type      Status  Last Probe  Last Transition
        Pending   True    28m         28m
        Running   True    28m         28m
        Complete  True    28m         28m
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    29m (x8 over 29m)  batch-job-controller  Updated JobRun "myjobrun"
        Normal  Completed  29m                batch-job-controller  JobRun completed successfully
    Instances:
        Name          Running  Status     Restarts  Age
        myjobrun-1-0  0/1      Succeeded  0         29m
        myjobrun-2-0  0/1      Succeeded  0         29m
        myjobrun-3-0  0/1      Succeeded  0         29m
        myjobrun-4-0  0/1      Succeeded  0         29m
    

    Wenn Sie differenziertere Details zur Jobausführung wünschen, verwenden Sie die Option --o yaml mit dem Befehl jobrun get, z. B. ibmcloud ce jobrun get --name myjobrun --o yaml. Diese Option ist nützlich, um ausführlichere Informationen in der Befehlszeilenschnittstelle für die Jobausführung anzuzeigen.

  3. Zeigen Sie die Protokolle der Jobausführung an.

        ibmcloud ce jobrun logs --instance  myjobrun-4-0
        ```
        Beispielausgabe
    
        ```txt {: screen}
        Getting logs for job run instance 'myjobrun-4-0'...
        OK
        myjobrun-4-0/myjobrun:
        Hi from a batch job! My index is: 4
        ```
    * Wenn Sie die Protokolle aller Instanzen Ihrer Jobausführung anzeigen möchten, verwenden Sie den Befehl [**`ibmcloud ce jobrun logs --jobrun JOBRUN_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-jobrun-logs); zum Beispiel:
    
    ```txt {: pre}
        ibmcloud ce jobrun logs --jobrun myjobrun
        ```
        Beispielausgabe
    
        ```txt {: screen}
        Getting logs for all instances of job run 'myjobrun'...
        Getting jobrun 'myjobrun'...
        Getting instances of jobrun 'myjobrun'...
        OK
        myjobrun-1-0/myjobrun:
        Hi from a batch job! My index is: 1
        myjobrun-2-0/myjobrun:
        Hi from a batch job! My index is: 2
        myjobrun-3-0/myjobrun:
        Hi from a batch job! My index is: 3
        myjobrun-4-0/myjobrun:
        Hi from a batch job! My index is: 4
        ```
    

Weitere Informationen finden Sie unter Jobprotokolle über die Befehlszeilenschnittstelle anzeigen.

Systemereignisinformationen für meine Jobs abrufen

Systemereignisinformationen können nützlich sein, um Probleme beim Ausführen von Jobs zu beheben. Sie können Systemereignisinformationen mit der CLI anzeigen.

Sie können Systemereignisse aller Instanzen einer Jobausführung oder Systemereignisse einer bestimmten Instanz einer Jobausführung anzeigen.

  1. Verwenden Sie den Befehl ibmcloud ce jobrun list, um alle definierten Jobausführungen aufzulisten; zum Beispiel:

    ibmcloud ce jobrun list
    
  2. Verwenden Sie den Befehl ibmcloud ce jobrun get, um die Details der Jobausführung abzurufen, einschließlich des Namens der Instanzen der Jobausführung; Beispiel:

    ibmcloud ce jobrun get --name myjobrun
    

    Beispielausgabe

    Getting jobrun 'myjobrun'...
    Getting instances of jobrun 'myjobrun'...
    Getting events of jobrun 'myjobrun'...
    OK
    Name:          myjobrun
    [...]
    Created:       2021-03-03T14:47:04-05:00
    Image:                icr.io/codeengine/firstjob
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    Runtime:
        Mode:                  task
        Array Indices:         1 - 4
        Array Size:            4
        JOP_ARRAY_SIZE Value:  4
        Max Execution Time:    7200
        Retry Limit:           3
    Status:
        Completed:          28m
        Instance Statuses:
        Succeeded:  4
        Conditions:
        Type      Status  Last Probe  Last Transition
        Pending   True    28m         28m
        Running   True    28m         28m
        Complete  True    28m         28m
    Events:
        Type    Reason     Age                Source                Messages
        Normal  Updated    29m (x8 over 29m)  batch-job-controller  Updated JobRun "myjobrun"
        Normal  Completed  29m                batch-job-controller  JobRun completed successfully
    Instances:
        Name          Running  Status     Restarts  Age
        myjobrun-1-0  0/1      Succeeded  0         29m
        myjobrun-2-0  0/1      Succeeded  0         29m
        myjobrun-3-0  0/1      Succeeded  0         29m
        myjobrun-4-0  0/1      Succeeded  0         29m
    

    Wenn Sie differenziertere Details zur Jobausführung wünschen, verwenden Sie die Option --o yaml mit dem Befehl jobrun get, z. B. ibmcloud ce jobrun get --name myjobrun --o yaml. Diese Option ist nützlich, um ausführlichere Informationen in der Befehlszeilenschnittstelle für die Jobausführung anzuzeigen.

  3. Zeigen Sie die Systemereignisinformationen der Jobausführung an.

        ibmcloud ce jobrun events --instance myjobrun-4-0
        ```
        Beispielausgabe
    
        ```txt {: screen}
        Getting events for job run instance 'myjobrun-4-0'...
        OK
        myjobrun-4-0:
        Type    Reason     Age    Source                 Messages
        Normal  Scheduled  2m14s  default-scheduler      Successfully assigned 4svg40kna19/myjobrun-4-0 to 10.240.64.10
        Normal  Pulling    2m13s  kubelet, 10.240.64.10  Pulling image "icr.io/codeengine/firstjob"
        Normal  Pulled     2m12s  kubelet, 10.240.64.10  Successfully pulled image "icr.io/codeengine/firstjob" in 1.234456436s
        Normal  Created    2m11s  kubelet, 10.240.64.10  Created container myjobrun
        Normal  Started    2m11s  kubelet, 10.240.64.10  Started container myjobrun
        ```
    * Verwenden Sie den Befehl [**`ibmcloud ce jobrun events --jobrun JUBRUN_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-jobrun-events), um Ereignisse aller Instanzen Ihrer Jobausführung anzuzeigen; zum Beispiel:
    
    ```txt {: pre}
        ibmcloud ce jobrun events --jobrun myjobrun
        ```
        Beispielausgabe
    
        ```txt {: screen}
        Getting jobrun 'myjobrun'...
        Getting instances of jobrun 'myjobrun'...
        Getting events for all instances of job run 'myjobrun'...
        OK
        myjobrun-1-0:
        Type    Reason     Age  Source                  Messages
        Normal  Scheduled  66s  default-scheduler       Successfully assigned 4svg40kna19/myjobrun-1-0 to 10.240.128.22
        Normal  Pulling    65s  kubelet, 10.240.128.22  Pulling image "icr.io/codeengine/firstjob"
        Normal  Pulled     64s  kubelet, 10.240.128.22  Successfully pulled image "icr.io/codeengine/firstjob" in 427.276949ms
        Normal  Created    64s  kubelet, 10.240.128.22  Created container myjobrun
        Normal  Started    64s  kubelet, 10.240.128.22  Started container myjobrun
        myjobrun-2-0:
        Type    Reason     Age  Source                Messages
        Normal  Scheduled  66s  default-scheduler     Successfully assigned 4svg40kna19/myjobrun-2-0 to 10.240.0.11
        Normal  Pulling    65s  kubelet, 10.240.0.11  Pulling image "icr.io/codeengine/firstjob"
        Normal  Pulled     63s  kubelet, 10.240.0.11  Successfully pulled image "icr.io/codeengine/firstjob" in 1.268252989s
        Normal  Created    63s  kubelet, 10.240.0.11  Created container myjobrun
        Normal  Started    63s  kubelet, 10.240.0.11  Started container myjobrun
        myjobrun-3-0:
        Type    Reason     Age  Source                Messages
        Normal  Scheduled  66s  default-scheduler     Successfully assigned 4svg40kna19/myjobrun-3-0 to 10.240.0.37
        Normal  Pulling    65s  kubelet, 10.240.0.37  Pulling image "icr.io/codeengine/firstjob"
        Normal  Pulled     63s  kubelet, 10.240.0.37  Successfully pulled image "icr.io/codeengine/firstjob" in 1.118647987s
        Normal  Created    63s  kubelet, 10.240.0.37  Created container myjobrun
        Normal  Started    63s  kubelet, 10.240.0.37  Started container myjobrun
        myjobrun-4-0:
        Type    Reason     Age  Source                 Messages
        Normal  Scheduled  66s  default-scheduler      Successfully assigned 4svg40kna19/myjobrun-4-0 to 10.240.64.10
        Normal  Pulling    65s  kubelet, 10.240.64.10  Pulling image "icr.io/codeengine/firstjob"
        Normal  Pulled     64s  kubelet, 10.240.64.10  Successfully pulled image "icr.io/codeengine/firstjob" in 1.234456436s
        Normal  Created    63s  kubelet, 10.240.64.10  Created container myjobrun
        Normal  Started    63s  kubelet, 10.240.64.10  Started container myjobrun
        ```
    

Verstehen, warum Job-Run-Indizes fehlschlagen können

Wenn die Job-Lauf-Indizes in der Konsole fehlschlagen, können Sie die Fehler und die Gründe nachschlagen, um Probleme zu beheben, die Probleme zu beheben und die Job-Lauf-Indizes erneut auszuführen.

Um mit Ihren Jobs und Jobausführungen zu arbeiten, klicken Sie auf der Seite „ Code Engine-Projekte “ in der Projektliste auf den Namen Ihres Projekts und anschließend auf „ Jobs “. Auf der Registerkarte „Jobausführungen“ werden die einzelnen Jobausführungen angezeigt. Unvollständige Auftragsläufe werden in der Spalte „Status“ als „ Failed (<error>) “ angezeigt. In der folgenden Tabelle werden die häufigsten Fehler beim Job-Run-Index und die zu ergreifenden Maßnahmen erläutert:

Fehler und Gründe für fehlgeschlagene Job-Lauf-Indizes
Fehler Erläuterung Empfohlene Benutzeraktion
ContainerExitedCode Ein Fehler, der einen von der Benutzer-Workload bereitgestellten Exit-Code enthält. Ermitteln Sie den Grund für den Exit-Code in Ihrer Anwendung und beheben Sie ihn.
ExceededEphemeralStorage Die Instanz hat mehr kurzlebigen Speicherplatz in ihrem Container zugewiesen, als zulässig ist. Erhöhen Sie den kurzzeitigen Speicher Ihrer Ressource.
ExecutableNotFound Die angegebene ausführbare Datei konnte im Container nicht gefunden werden. Ohne sie kann der Container nicht starten. Überprüfen Sie, ob der in Ihrem Container-Image angegebene Einstiegspunkt korrekt ist und ob die ausführbare Datei im Image vorhanden ist.
MaxExecutionTimeExceeded Der Job-Lauf wurde nicht innerhalb der maximalen Ausführungszeit abgeschlossen. Wenn mehrere Instanzen ausgeführt wurden, zeigen alle Instanzen, die noch nicht abgeschlossen sind, diesen Fehler an. Erhöhen Sie den Timeout-Wert für den Joblauf.
OOMKilled Ein Fehler aufgrund von unzureichendem Speicher. Die Instanz hat die zugewiesene Speichergrenze überschritten. Erhöhen Sie die CPU- und Speicherkapazität Ihrer Ressource.

Nachdem Sie die Fehler behoben haben, klicken Sie auf "Rerun failed indexes ", um den Auftrag für fehlgeschlagene Indizes erneut auszuführen.

Container-Image-Referenz für eigenen Job überprüfen

Wenn Sie mit Code Engine-Jobs arbeiten, müssen Sie eine Container-Image-Referenz und einen geheimen Registry-Schlüssel angeben, um auf das Image zuzugreifen. Damit der Job ordnungsgemäß funktioniert, müssen die Imagereferenz und ihre Zugriffseigenschaften für die Lebensdauer des Jobs gültig bleiben.

Siehe Wie kann ich meine Imagereferenz überprüfen?