Azure Batch 作業和工作錯誤
新增、排程或執行 Azure Batch 作業和工作時,可能會發生各種錯誤。 可以直接偵測新增作業和工作時發生的錯誤。 API、命令列或使用者介面通常會立即傳回任何失敗。 本文涵蓋在提交作業和工作之後可能發生的錯誤,以及如何檢查和處理這些錯誤。
作業失敗
作業是指一或多個工作的群組,這些工作指定了要執行的命令行。 新增作業時,可以指定下列選擇性參數。 這些參數會影響作業失敗的方式。
JobConstraints。 可以選擇性使用
maxWallClockTime
屬性,以設定作業在作用中或執行中的時間上限。 如果作業超過maxWallClockTime
,作業就會終止,且 JobExecutionInformation 中的屬性terminateReason
將被設定為MaxWallClockTimeExpiry
。JobPreparationTask。 可以選擇性地一個作業準備工作,讓其在排程執行作業工作的每個計算節點上執行。 節點會在首次執行作業的工作之前執行作業準備工作。 如果作業準備工作失敗,則工作不會執行,且作業也不會完成。
JobReleaseTask。 選擇性地為具有作業準備工作的作業指定作業釋放工作。 當作業終止時,作業釋放工作會在執行作業準備工作的每個集區節點上執行。 如果作業釋放工作失敗,則作業仍會移至
completed
狀態。
在 Azure 入口網站中,您可以在批次 [新增作業] 畫面的 [作業管理員]、[準備和釋放工作] 和 [進階] 區段中設定這些參數。
作業屬性
檢查 JobExecutionInformation 中的下列作業屬性是否存在錯誤:
terminateReason
屬性指示MaxWallClockTimeExpiry
作業是否超出作業條件約束中指定的maxWallClockTime
,因此作業已終止。 如果作業的onTaskFailure
屬性設定為performExitOptionsJobAction
,則此屬性也可設為taskFailed
,並且如果具有退出條件約束指定terminatejob
的jobAction
,則工作會失敗。如果發生排程錯誤,則會設定 JobSchedulingError 屬性。
作業準備工作
當節點第一次執行作業的工作時,作業準備工作的執行個體會在每個計算節點上執行。 您可以將作業準備工作視為工作範本,其中可執行多個執行個體,數目最多可與集區中的節點數目一樣。 檢查作業準備工作執行個體,確認是否存在錯誤。
您可以使用 Job - List Preparation and Release Task Status API,列出指定作業的所有作業準備和釋放工作執行個體的執行狀態。 如同其他工作,JobPreparationTaskExecutionInformation 具有 failureInfo
、exitCode
和 result
等屬性。
當作業準備工作執行時,觸發作業準備工作的工作會移至 preparing
的 taskState。 如果作業準備工作失敗,則觸發工作會還原為 active
狀態,並且不會執行。
如果作業準備工作失敗,則觸發作業工作不會執行。 作業未完成且停滯不前。 如果沒有包含可排程工作的其他作業,則集區可能會閒置。
作業釋放工作
在執行作業準備工作的每個節點上,當作業終止時,則作業釋放工作執行個體會執行。 檢查作業釋放工作執行個體,確認是否存在錯誤。
您可以使用 Job - List Preparation and Release Task Status API,列出指定作業的所有作業準備和釋放工作執行個體的執行狀態。 如同其他工作,JobReleaseTaskExecutionInformation 具有 failureInfo
、exitCode
和 result
等屬性。
如果一或多個作業釋放工作失敗,則作業仍會終止,並移至 completed
狀態。
工作失敗
作業工作可能會因為以下原因而失敗:
- 工作命令列失敗,並傳回非零的結束代碼。
- 為工作指定的一或多個
resourceFiles
未下載。 - 為工作指定的一或多個
outputFiles
未上傳。 - 工作的已耗用時間超過 TaskConstraints 中指定的屬性
maxWallClockTime
。
在所有情況下,檢查下列屬性是否有錯誤,並查看錯誤的相關資訊:
TaskExecutionInformation 屬性包含多個可提供錯誤相關資訊的屬性。 taskExecutionResult 會指出工作失敗的原因,而
exitCode
和failureInfo
提供有關失敗的詳細資訊。無論工作成功還是失敗,一律會移至
completed
TaskState。
考慮工作失敗對作業以及任何工作相依性的影響。 您可以指定 ExitConditions 來設定相依性和作業設定動作。
- DependencyAction 控制是要封鎖或執行相依於失敗工作的工作。
- JobAction 控制失敗的工作是否會導致作業停用、終止或保持不變。
工作命令列
工作命令列不會在計算節點上的殼層下執行,因此其無法以原生方式利用殼層功能,例如環境變數擴充。 若要利用此類功能,您必須在命令列中叫用殼層。 如需詳細資訊,請參閱環境變數的命令列擴充功能。
工作命令行輸出會寫入 stderr.txt 和 stdout.txt 檔案。 應用程式還可能會寫入應用程式專屬的記錄檔。 請務必為應用程式實行全面的錯誤檢查,以便即時偵測並診斷問題。
工作記錄
如果執行工作的集區節點仍然存在,則可以取得並檢視工作記錄檔。 數個 API 允許列出和取得工作檔案,例如 File - Get From Task。 您也可以使用 Azure 入口網站列出和檢視工作或節點的記錄檔。
在節點的 [概觀] 頁面頂端,選取 [上傳批次記錄]。
在 [上傳 Batch 記錄] 頁面上,選取 [選擇儲存體容器],選取要上傳至的 Azure 儲存體容器,然後選取 [開始上傳]。
您可以從儲存體容器頁面檢視、開啟或下載記錄。
輸出檔案
由於 Batch 集區和集區節點通常是暫時性節點,因此在持續新增和刪除節點的情況下,最好在作業執行時儲存記錄檔。 工作輸出檔案是將記錄檔儲存至 Azure 儲存體的簡便方式。 如需詳細資訊,請參閱使用 Batch 服務 API 將工作資料保存到 Azure 儲存體。
每次上傳檔案時,Batch 都會將 fileuploadout.txt 和 fileuploaderr.txt 兩個記錄檔寫入計算節點中。 若要進一步了解特定錯誤,您可以檢查這些記錄檔。 如果從未嘗試上傳檔案 (例如因為工作本身無法執行),則這些記錄檔不會存在。
下一步
- 深入了解 Batch 作業和工作,以及作業準備和釋放工作。
- 了解 Batch 集區和節點錯誤。