共用方式為


Azure Batch 中的錯誤處理和偵測

有時候,您可能需要處理 Azure Batch 解決方案中的工作和應用程式失敗。 本文說明不同類型的 Batch 錯誤,以及如何解決常見問題。

錯誤碼

您可能會在 Batch 中看到的一些一般錯誤類型如下:

  • 從未到達 Batch 的要求發生網路失敗,或者當 Batch 回應未能及時到達用戶端時發生網路失敗。
  • 內部伺服器錯誤。 這些錯誤具有標準 5xx 狀態代碼 HTTP 回應。
  • 節流相關錯誤。 這些錯誤包括 429503 狀態代碼 HTTP 回應與 Retry-after 標頭。
  • 4xx 錯誤,例如 AlreadyExistsInvalidOperation。 這些錯誤表示資源未處於狀態轉換的正確狀態。

如需特定錯誤碼的詳細資訊,請參閱 Batch 狀態和錯誤碼。 此參考包含 REST API、Batch 服務和作業工作和排程的錯誤碼。

應用程式失敗

在執行期間,應用程式可能會產生診斷輸出。 您可以使用此輸出來針對問題進行疑難解答。 Batch 服務會將標準輸出和標準錯誤輸出寫入計算節點上工作目錄中 stdout.txtstderr.txt 檔案。 如需詳細資訊,請參閱 Batch 中的檔案和目錄

若要下載這些輸出檔案,請使用 Azure 入口網站或其中一個 Batch SDK。 例如,若要擷取檔案以進行疑難解答,請使用 Batch .NET 連結庫中的 ComputeNode.GetNodeFileCloudTask.GetNodeFile

任務錯誤

工作錯誤分為數個類別。

前置處理錯誤

如果任務無法啟動,則會為任務設定前置處理錯誤。 發生前置處理錯誤的可能原因:

  • 工作的資源檔已移動。
  • 記憶體帳戶已無法使用。
  • 發生另一個問題,導致無法成功將檔案複製到節點。

檔案上傳錯誤

如果您為工作指定的檔案因為任何原因而無法上傳,則會為工作設定檔案上傳錯誤。 檔案上傳錯誤可能會發生,如果:

  • 提供給存取 Azure 記憶體的共用存取簽章 (SAS) 令牌無效。
  • SAS 令牌不提供寫入許可權。
  • 記憶體帳戶已無法使用。
  • 發生另一個問題,導致無法成功從節點複製檔案。

應用程式錯誤

工作命令行所指定的程式也可以失敗。 如需詳細資訊,請參閱 工作結束代碼

針對應用程式錯誤,請將 Batch 設定為自動重試工作,最多指定次數。

條件約束錯誤

若要指定作業或工作的最大執行持續時間,請設定 maxWallClockTime 條件約束。 使用此設定來終止無法進行的工作。

當工作超過時間上限時:

  • 工作標示為 已完成
  • 結束代碼設定為 0xC000013A
  • schedulingError 字段會標示為 { category:"ServerError", code="TaskEnded"}

任務結束代碼

當工作執行進程時,Batch 會以進程的傳回碼填入工作的結束代碼屬性。 如果進程傳回非零結束代碼,Batch 服務會將工作標示為失敗。

Batch 服務不會判斷工作的結束代碼。 進程本身,或進程執行所在的作系統,會決定結束代碼。

工作失敗或中斷

工作可能會偶爾失敗或中斷。 例如:

  • 工作應用程式本身可能會失敗。
  • 工作執行所在的節點可能會重新啟動。
  • 調整大小作業可能會從集區中移除節點。 如果集區的解除分配原則立即移除節點,而不需要等待工作完成,就可能發生此動作。

在所有情況下,Batch 都可以自動將工作重新排入佇列,以在另一個節點上執行。

間歇性問題也可能導致工作停止響應或花費太長的時間才能執行。 您可以設定工作的最大執行間隔。 如果工作超過間隔,Batch 服務就會中斷工作應用程式。

連接到計算節點

您可以從遠端登入計算節點來執行偵錯和疑難解答。 使用 Azure 入口網站下載 Windows 節點的遠端桌面通訊協定 (RDP) 檔案,並取得 Linux 節點的安全殼層 (SSH) 連線資訊。 您也可以使用 Batch .NETBatch Python API 下載此資訊。

若要透過 RDP 或 SSH 連線到節點,請先在節點上建立使用者。 使用下列其中一種方法:

如有必要, 請設定或停用對計算節點的存取

針對故障節點進行疑難排解

Batch 用戶端應用程式或服務可以檢查失敗工作的元數據,以識別問題節點。 集區中的每個節點都有唯一ID。 工作元數據包含工作執行所在的節點。 找到問題節點之後,請嘗試下列方法來解決失敗。

重新啟動節點

重新啟動節點有時會修正潛在問題,例如停滯或當機的進程。 如果您的集區使用啟動工作,或您的作業使用作業準備工作,那麼節點重新啟動會執行這些工作。

重新映像節點

重新灌製節點會重新安裝作業系統。 重新映射發生之後,啟動工作和作業準備工作會重新執行。

從集區移除節點

在某些情況下,需要從集區中移除節點。

在節點上停用任務排程

停用節點上的工作排程可有效地讓節點離線。 Batch 不會將任何進一步的工作指派給節點。 不過,節點會繼續在集區中運行。 然後,您可以進一步調查失敗,而不會遺失失敗的工作數據。 節點也不會造成更多任務失敗。

例如,停用節點上的工作排程。 然後,從遠端登入節點。 檢查事件記錄檔,並進行其他故障排除。 解決問題之後,請再次啟用工作排程,讓節點重新上線。

您可以使用這些動作來指定 Batch 處理目前在節點上執行的工作。 例如,當您使用 Batch .NET API 停用工作排程時,您可以指定 DisableComputeNodeSchedulingOption 的列舉值。 您可以選擇:

  • 終止執行中的工作: Terminate
  • 重新排程其他節點上的工作: Requeue
  • 在執行動作之前,允許執行中工作完成: TaskCompletion

錯誤後重試

Batch API 會通知您有關失敗的情況。 您可以使用內建的全域重試處理程式重試所有 API。 最佳做法是使用此選項。

失敗之後,請等候數秒再重試。 如果您重試太頻繁或太快,重試處理程式會節流要求。

後續步驟