작업 디버깅

문제점 해결 팁을 사용하여 빌드의 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
    

    작업 실행에 대한 세분화된 세부사항을 원하는 경우 jobrun get 명령에 --o yaml 옵션을 사용하십시오(예: 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
    

    작업 실행에 대한 세분화된 세부사항을 원하는 경우 jobrun get 명령에 --o yaml 옵션을 사용하십시오(예: 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 작업을 수행할 때 이미지에 액세스하려면 컨테이너 이미지 참조 및 레지스트리 시크릿을 지정해야 합니다. 작업이 올바르게 작동하려면 이미지 참조 및 해당 액세스 특성이 작업의 수명 동안 유효해야 합니다.

내 이미지 참조를 확인하는 방법 을 참조하십시오.