除錯工作

請參閱這些疑難排解提示,了解如何排除 IBM Cloud® Code Engine 工作及該工作的執行過程中的問題。

要考量的工作限制

每個專案可以擁有的工作數目上限為 100。 在您需要移除或清除舊的工作執行之前,每個專案最多只能執行 100 個工作執行。

如需工作 (包括記憶體及 CPU) 限制的相關資訊,請參閱 Code Engine的限制及配額

使用 CLI,您可以使用 ibmcloud ce project get 指令來顯示限制及現行使用情形的相關資訊。 例如:

ibmcloud ce project get --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 來檢視工作日誌。

當您從控制台查看日誌時,您必須在與您的IBM Cloud Logs項目相同的區域中建立一個 { Code Engine } 實例。 在使用 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  myjobrun-4-0
        ```
        輸出範例
    
        ```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
        ```
    * 若要顯示工作執行所有實例的日誌,請使用 [**`ibmcloud ce jobrun logs --jobrun JOBRUN_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-jobrun-logs) 指令; 例如,
    
    ```txt {: pre}
        ibmcloud ce jobrun logs --jobrun myjobrun
        ```
        輸出範例
    
        ```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
        ```
    

如需相關資訊,請參閱 使用 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 myjobrun-4-0
        ```
        輸出範例
    
        ```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
        ```
    * 若要顯示工作執行所有實例的事件,請使用 [**`ibmcloud ce jobrun events --jobrun JUBRUN_NAME`**](/docs/codeengine?topic=codeengine-cli#cli-jobrun-events) 指令; 例如,
    
    ```txt {: pre}
        ibmcloud ce jobrun events --jobrun myjobrun
        ```
        輸出範例
    
        ```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
        ```
    

瞭解工作執行索引可能失敗的原因

當工作執行索引在主控台失敗時,您可以查詢錯誤和原因,以協助排除故障、糾正問題,然後再重新執行工作執行索引。

若要管理您的工作與工作執行,請從 「Code Engine」的「專案」頁面中,點選專案清單中的專案名稱,然後點選「工作」。 在「工作執行」分頁中,查看工作執行實例。 未完成的作業執行會在「狀態」欄位中顯示為「Failed (<error>)」。 下表說明常見的作業執行索引錯誤和要採取的行動:

工作執行索引失敗的錯誤與原因
錯誤 說明 建議使用者動作
ContainerExitedCode 一個包含由使用者工作負載提供的結束代碼的錯誤。 在您的應用程式中確定退出代碼的原因,並進行除錯。
ExceededEphemeralStorage 實例在其容器中分配的短暫存儲超過允許的數量。 增加資源的短暫儲存。
ExecutableNotFound 無法在容器中找到指定的可執行檔案。 沒有它,容器無法啟動。 驗證在您的容器映像中指定的入口點是否正確,以及可執行檔是否存在於映像中。
MaxExecutionTimeExceeded 工作執行未在最長執行時間內完成。 如果有多個實體正在執行,所有尚未完成的實體都會顯示此錯誤。 增加工作執行逾時值。
OOMKilled 記憶體不足的錯誤。 實例超出了分配的記憶體限制。 增加資源的 CPU 和記憶體。

解決錯誤後,按一下重新執行失敗的索引,以重新執行失敗索引的工作。

驗證工作的儲存器映像檔參照

當您使用 Code Engine 工作時,必須指定容器映像檔參照及登錄密鑰才能存取映像檔。 若要讓工作正確運作,映像檔參照及其存取內容在工作的生命期限內必須保持有效。

請參閱 如何驗證我的映像檔參照?