IBM Cloud Docs
调试作业

调试作业

使用故障诊断提示来了解如何对 IBM Cloud® Code Engine 作业和作业运行进行故障诊断。

要考虑的作业限制

每个项目可以具有的最大作业数为 100。 在需要除去或清除旧作业之前,每个项目总共只能运行 100 个作业。

有关包括内存和 CPU 在内的作业限制的更多信息,请参阅 Code Engine的限制和配额

通过 CLI,您可以使用 ibmcloud ce project get 命令来显示有关限制和当前使用情况的信息。 例如:

ibmcloud ce project create --name myproject

示例输出

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

获取我的作业的日志

日志可帮助您在运行作业时对问题进行故障诊断。 您可以从控制台或使用 CLI 查看作业日志。

从控制台查看日志时,必须在“Code Engine项目的同一区域创建一个”IBM Cloud Logs实例。 在使用 Code Engine 作业之前,不需要创建此实例。Code Engine 使您能够轻松地为作业启用日志记录。 您可以在添加日志记录功能之后查看作业日志。 有关更多信息,请参阅 从控制台查看作业日志

使用 CLI 时,可以显示正在运行的作业的所有实例的日志,也可以显示作业的特定实例的日志。

  1. 使用 ibmcloud ce jobrun list 命令列出所有已定义的作业运行; 例如,

    ibmcloud ce jobrun list
    
  2. 使用 ibmcloud ce jobrun get 命令可获取作业运行的详细信息,包括作业运行的实例的名称; 例如,

    ibmcloud ce jobrun get --name myjobrun
    

    示例输出

    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
    

    如果需要有关作业运行的更多细颗粒度详细信息,请将 --o yaml 选项与 jobrun get 命令配合使用; 例如,ibmcloud ce jobrun get --name myjobrun --o yaml。 此选项对于在 CLI 中显示作业运行的更详细信息很有用。

  3. 显示作业运行实例的日志。

    • 要显示作业运行的特定实例的日志,请使用 ibmcloud ce jobrun logs --instance INSTANCE_NAME 命令; 例如,

      ibmcloud ce jobrun logs --instance  myjobrun-4-0
      

      示例输出

      Getting logs for job run instance 'myjobrun-4-0'...
      OK
      
      myjobrun-4-0/myjobrun:
      Hi from a batch job! My index is: 4
      
    • 要显示作业运行的所有实例的日志,请使用 ibmcloud ce jobrun logs --jobrun JOBRUN_NAME 命令; 例如,

      ibmcloud ce jobrun logs --jobrun myjobrun
      

      示例输出

      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
      

有关更多信息,请参阅 使用 CLI 查看作业日志

获取作业的系统事件信息

系统事件信息可帮助您在运行作业时对问题进行故障诊断。 您可以使用 CLI 来查看系统事件信息。

您可以显示作业运行的所有实例的系统事件,也可以显示作业运行的特定实例的系统事件。

  1. 使用 ibmcloud ce jobrun list 命令列出所有已定义的作业运行; 例如,

    ibmcloud ce jobrun list
    
  2. 使用 ibmcloud ce jobrun get 命令可获取作业运行的详细信息,包括作业运行实例的名称; 例如,

    ibmcloud ce jobrun get --name myjobrun
    

    示例输出

    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
    

    如果需要有关作业运行的更多细颗粒度详细信息,请将 --o yaml 选项与 jobrun get 命令配合使用; 例如,ibmcloud ce jobrun get --name myjobrun --o yaml。 此选项对于在 CLI 中显示作业运行的更详细信息很有用。

  3. 显示作业运行实例的系统事件。

    • 要显示作业运行的特定实例的事件,请使用 ibmcloud ce jobrun events --instance INSTANCE_NAME 命令; 例如,

      ibmcloud ce jobrun events --instance myjobrun-4-0
      

      示例输出

      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
      
    • 要显示作业运行的所有实例的事件,请使用 ibmcloud ce jobrun events --jobrun JUBRUN_NAME 命令; 例如,

      ibmcloud ce jobrun events --jobrun myjobrun
      

      示例输出

      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
      

了解工作运行指数为何会失败

当控制台中的作业运行索引失败时,您可以查找错误和原因,以帮助排除故障、解决问题,然后重新运行作业运行索引。

要处理您的工作和任务,请从 Code Engine 控制面板中,点击项目列表中的项目名称,然后点击 “作业”。 从 “职位”选项卡中选择一个职位。 点击提交作业,然后在“提交作业”面板中点击提交作业按钮,查看作业运行实例。 未完成的工作在状态栏中显示为 Failed (<error>)。 下表解释了常见的工作运行指数错误和应采取的措施:

作业运行索引失败错误和原因
错误 说明 建议用户采取的行动
ContainerExitedCode 用户错误,包括由用户工作负载提供的退出代码。 确定应用程序中退出代码的原因并对其进行调试。
ExceededEphemeralStorage 实例在其容器内分配的临时存储空间超过了允许的范围。 增加资源的临时存储空间。
ExecutableNotFound 无法在容器中找到指定的可执行文件。 没有它,集装箱无法启动。 请确认容器镜像中指定的入口点是否正确,以及镜像中是否存在可执行文件。
MaxExecutionTimeExceeded 任务运行未在最大执行时间内完成。 如果多个实例正在运行,则所有尚未完成的实例都会显示此错误。 增加运行超时值。
OOMKilled 内存不足错误。 实例超出分配的内存限制。 增加资源的CPU和内存。

更正错误后,点击 “重新运行失败的索引”,为失败的索引再次运行作业。

验证我的作业的容器映像引用

使用 Code Engine 作业时,必须指定容器映像引用和注册表私钥以访问该映像。 要使作业正常工作,映像引用及其访问属性必须在作业的生命周期内保持有效。

请参阅 如何验证我的图像引用?