Azure Batch 中的錯誤處理和偵測

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

錯誤碼

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

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

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

應用程式失敗

在執行期間,應用程式可能會產生診斷輸出。 您可使用此輸出對問題進行排解疑難。 Batch 服務會將標準輸出和標準錯誤輸出寫入計算節點上工作目錄中的 stdout.txt 和 stderr.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 用戶端應用程式或服務可檢查失敗工作的中繼資料,以識別問題節點。 集區中的每個節點都有唯一識別碼。 工作中繼資料包含工作執行所在的節點。 找到問題節點之後,請嘗試使用下列方法來解決失敗。

重新啟動節點

重新啟動節點有時可以修復潛在的問題,例如停滯或損毀的程序。 如果集區使用啟動工作,或作業使用作業準備工作,則在節點重新啟動時會執行這些工作。

為節點重新安裝映像

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

從集區中移除節點

有時需要從集區中移除節點。

停用節點上的工作排程

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

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

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

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

錯誤後重試

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

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

下一步