ジョブのデバッグ
以下のトラブルシューティングのヒントを使用して、IBM Cloud® Code Engine ジョブおよびジョブ実行のトラブルシューティング方法を確認してください。
考慮すべきジョブ制限
プロジェクト 1 つにつき作成できるジョブの最大数は 100 です。 プロジェクト 1 つにつき合計 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 でも表示できます。
コンソールでログを表示する場合は、IBM Cloud Logs プロジェクトと同じリージョンに Code Engine インスタンスを作成する必要があります。 Code Engineジョブを操作する前に、このインスタンスを作成する必要はありません。Code Engineを使用すると、ジョブのロギングを簡単に使用可能にできます。 ロギング機能を追加すると、ジョブ・ログを表示できるようになります。 詳しくは、コンソールからのジョブ・ログの表示を参照してください。
CLI を使用すると、実行中のジョブのすべてのインスタンスのログを表示したり、ジョブの特定のインスタンスのログを表示したりできます。
-
ibmcloud ce jobrun listコマンドを使用して、定義済みのすべてのジョブ実行をリストします。以下に例を示します。ibmcloud ce jobrun list -
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 でより詳細な情報を表示するのに役立ちます。 -
ジョブ実行のインスタンスのログを表示します。
-
ジョブ実行の特定のインスタンスのログを表示するには、
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 を使用してシステム・イベント情報を表示できます。
ジョブ実行のすべてのインスタンスのシステム・イベントを表示したり、ジョブ実行の特定のインスタンスのシステム・イベントを表示したりできます。
-
ibmcloud ce jobrun listコマンドを使用して、定義済みのすべてのジョブ実行をリストします。以下に例を示します。ibmcloud ce jobrun list -
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 でより詳細な情報を表示するのに役立ちます。 -
ジョブ実行のインスタンスのシステム・イベントを表示します。
-
ジョブ実行の特定のインスタンスのイベントを表示するには、
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 ジョブを操作する場合、イメージにアクセスするためのコンテナー・イメージ参照とレジストリー・シークレットを指定する必要があります。 ジョブが正しく機能するためには、ジョブの存続期間中、イメージ参照とそのアクセス・プロパティーが有効なままでなければなりません。
イメージ参照を確認するにはどうすればよいですか? を参照してください。