Azure Batch 集區和節點錯誤

警告

這篇文章參考 CentOS,這是接近生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

一些 Azure Batch 集區建立和管理作業會立即發生。 偵測這些作業的失敗很簡單,因為錯誤通常會從API、命令行或使用者介面立即傳回。 不過,某些作業是異步的、在背景中執行,而且需要幾分鐘的時間才能完成。 本文說明偵測和避免集區和節點背景作業中可能發生失敗的方法。

請務必將您的應用程式設定為實作完整的錯誤檢查,特別是針對異步操作。 完整的錯誤檢查可協助您及時識別和診斷問題。

集區錯誤

集區錯誤可能與調整逾時或失敗、自動調整失敗或集區刪除失敗有關。

針對逾時或失敗調整大小

當您建立新的集區或調整現有集區的大小時,您可以指定節點的目標數目。 建立或重設大小作業會立即完成,但新節點的實際配置或移除現有節點可能需要幾分鐘的時間。 您可以在集區 - 新增集區 - 重設大小 API 中指定重設大小逾時。 如果 Batch 無法在重設大小逾時期間配置目標節點數目,集區會進入穩定狀態,並報告重設大小錯誤。

resizeError 屬性會列出最近評估所發生的錯誤。

重設大小錯誤的常見原因包括:

  • 調整逾時時間太短。 通常,預設逾時 15 分鐘的時間足以配置或移除集區節點。 如果您要配置大量的節點,例如來自 Azure Marketplace 映射的 1,000 個以上的節點,或來自自定義虛擬機 (VM) 映射的 300 個以上的節點,您可以將重設大小逾時設定為 30 分鐘。

  • 核心配額不足。 Batch 帳戶在可配置於所有集區的核心數目中受到限制,且一旦達到該配額,就會停止配置節點。 您可以增加核心配額,讓 Batch 可以配置更多節點。 如需詳細資訊,請參閱 Batch 服務配額和限制

  • 當集區位於虛擬網路時,子網IP不足。 虛擬網路子網必須有足夠的IP位址,才能配置給每個要求的集區節點。 否則,就會無法建立節點。 如需詳細資訊,請參閱 在虛擬網路中建立 Azure Batch 集區。

  • 當集區位於虛擬網路時,資源不足。 當您在虛擬網路中建立集區時,您可以在與 Batch 帳戶相同的訂用帳戶中建立負載平衡器、公用 IP 和網路安全組 (NSG) 等資源。 請確定這些資源的訂用帳戶配額已足夠。

  • 具有自定義 VM 映像的大型集區。 使用自定義 VM 映射的大型集區可能需要較長的時間才能配置,而且可能會發生重設大小逾時。 如需限制和設定的建議,請參閱 使用 Azure 計算資源庫建立集區

自動調整失敗

您可以將 Azure Batch 設定為自動調整集區中的節點數目,並定義集區自動調整公式的參數。 Batch 服務接著會使用公式定期評估集區中的節點數目,並設定新的目標數位。 如需詳細資訊,請參閱 建立自動公式,以調整 Batch 集區中的計算節點。

當您使用自動調整時,可能會發生下列問題:

  • 自動調整評估失敗。
  • 產生的重設大小作業失敗並逾時。
  • 自動調整公式的問題會導致不正確的節點目標值。 重設大小可能會正常或逾時。

若要取得上次自動調整評估的相關信息,請使用 autoScaleRun 屬性。 此屬性會報告評估時間、值和結果,以及任何效能錯誤。

集區 重設大小完整事件 會擷取所有評估的相關信息。

集區刪除失敗

若要刪除包含節點的集區,Batch 會先刪除節點,這可能需要幾分鐘的時間才能完成。 Batch 接著會刪除集區物件本身。

Batch 會在刪除程式期間將 poolState 設定為 deleting 。 呼叫的應用程式可以使用 和 stateTransitionTime 屬性來偵測集區刪除是否花費太長state的時間。

如果集區刪除所花費的時間超過預期,Batch 會定期重試,直到成功刪除集區為止。 在某些情況下,延遲是由於 Azure 服務中斷或其他暫時性問題所致。 防止成功刪除集區的其他因素,可能需要您採取動作來更正問題。 這些因素可能包括下列問題:

  • 資源鎖定可能會放在 Batch 建立的資源上,或放在 Batch 所使用的網路資源上。

  • 您所建立的資源可能取決於 Batch 建立的資源。 例如,如果您在 虛擬網路中建立集區,Batch 會建立 NSG、公用 IP 位址和負載平衡器。 如果您在集區外部使用這些資源,則無法刪除集區。

  • Microsoft.Batch資源提供者可能會從包含集區的訂用帳戶取消註冊。

  • 針對使用者訂用帳戶模式 Batch 帳戶, Microsoft Azure Batch 可能不再具有包含集區之訂用帳戶的 參與者擁有者 角色。 如需詳細資訊,請參閱 允許 Batch 存取訂用帳戶

節點錯誤

即使 Batch 在集區中成功配置節點,各種問題可能會導致某些節點狀況不良且無法執行工作。 這些節點仍會產生費用,因此請務必偵測問題,以避免支付您無法使用的節點費用。 瞭解常見的節點錯誤,並瞭解目前的 jobState 對於疑難解答很有用。

啟動工作失敗

您可以指定集區的選擇性 startTask 。 如同任何工作,啟動工作會使用命令行,而且可以從記憶體下載資源檔。 當節點啟動時,每個節點都會執行啟動工作。 屬性 waitForSuccess 會指定 Batch 是否要等到啟動工作順利完成,再將任何工作排程到節點。 如果您將節點設定為等候啟動工作順利完成,但啟動工作失敗,則節點無法使用,但仍會產生費用。

您可以使用最上層 startTaskInformation 節點屬性的 taskExecutionResulttaskFailureInformation 屬性來偵測啟動工作失敗。

失敗的啟動工作也會讓 Batch 將 computeNodeStatestarttaskfailed設定為 ,如果 waitForSuccess 設定為 true

如同任何工作,啟動工作失敗的原因有很多。 若要進行疑難解答,請檢查 stdoutstderr 和任何其他工作特定的記錄檔。

開始工作必須重新進入,因為啟動工作可以在相同的節點上執行多次,例如當節點重新映像或重新啟動時。 在罕見的情況下,當啟動工作在事件發生之後執行時,會導致節點重新啟動、一個操作系統(OS)或暫時磁碟重新映像,而另一個操作系統則不會。 由於 Batch 啟動工作和所有 Batch 工作都是從暫時磁碟執行,因此這種情況通常不是問題。 不過,如果啟動工作將應用程式安裝到 OS 磁碟,並將其他數據保留在暫時磁碟上,可能會發生同步問題。 如果您使用這兩個磁碟,請據以保護您的應用程式。

應用程式套件下載失敗

您可以為集區指定一或多個應用程式套件。 Batch 會將指定的套件檔案下載至每個節點,並在節點啟動之後取消壓縮檔案,但在排程工作之前。 使用啟動工作命令搭配應用程式套件很常見,例如將檔案複製到不同的位置或執行安裝程式。

如果應用程式套件無法下載和取消壓縮, computeNodeError 屬性會報告失敗,並將節點狀態設定為 unusable

容器下載失敗

您可以在集區上指定一或多個容器參考。 Batch 會將指定的容器下載至每個節點。 如果容器無法下載, computeNodeError 屬性會報告失敗,並將節點狀態設定為 unusable

節點OS更新

針對 Windows 集區, enableAutomaticUpdates 預設會設定為 true 。 雖然建議允許自動更新,但更新可能會中斷工作進度,特別是當工作長時間執行時。 如果您需要確保 OS 更新不會意外發生,您可以將此值 false 設定為 。

處於無法使用狀態的節點

Batch 可能會因為許多原因將 computeNodeState 設定為 unusable 。 您無法將工作排程到 unusable 節點,但節點仍會產生費用。

如果 Batch 可以判斷原因,computeNodeError 屬性會報告它。 如果節點處於 unusable 狀態,但沒有 computeNodeError,表示 Batch 無法與 VM 通訊。 在此情況下,Batch 一律會嘗試復原 VM。 不過,Batch 不會自動嘗試復原無法安裝應用程式套件或容器的 VM,即使其狀態為 unusable

節點的其他原因 unusable 可能包括下列原因:

  • 自訂 VM 映像無效。 例如,映像未正確備妥。
  • VM 因為基礎結構失敗或低階升級而移動。 Batch 會復原節點。
  • VM 映射已部署在不支援它的硬體上。 例如,CentOS HPC 映射會部署在Standard_D1_v2 VM 上
  • VM 位於 Azure 虛擬網路,且流量已封鎖至密鑰埠。
  • VM 位於虛擬網路中,但 Azure 儲存體 的輸出流量會遭到封鎖。
  • VM 位於具有自定義 DNS 設定的虛擬網路中,且 DNS 伺服器無法解析 Azure 記憶體。

節點代理程式記錄檔

在每個集區節點上執行的 Batch 代理程式程式會提供記錄檔,如果您需要連絡有關集區節點問題的支持人員,可能會有所説明。 您可以透過 Azure 入口網站、Batch Explorer 或計算節點 - 上傳 Batch 服務記錄 API 上傳節點的記錄檔。 上傳並儲存記錄檔之後,您可以刪除節點或集區,以節省執行節點的成本。

節點磁碟已滿

Batch 會使用節點集區 VM 上的暫存磁碟驅動器來儲存檔案,例如下列作業檔案、工作檔案和共用檔案:

  • 應用程式套件檔案
  • 工作資源檔
  • 下載至其中一個 Batch 資料夾的應用程式特定檔案
  • 每個工作應用程式執行的 Stdoutstderr 檔案
  • 應用程式特定的輸出檔案

應用程式套件或啟動工作資源檔等檔案只有在 Batch 建立集區節點時才會寫入一次。 即使它們只寫入一次,但如果這些檔案太大,他們還是可以填滿暫存磁碟驅動器。

其他檔案,例如 stdoutstderr,都是針對節點執行的每個工作所撰寫。 如果大量工作在相同的節點上執行,或工作檔案太大,則它們可能會填滿暫存磁碟驅動器。

節點在OS磁碟上也需要少量的空間,才能在啟動之後建立使用者。

暫存磁碟驅動器的大小取決於 VM 大小。 挑選 VM 大小的其中一個考慮是確保暫存磁碟驅動器有足夠的空間供規劃的工作負載使用。

當您在 Azure 入口網站 中新增集區時,可以顯示 VM 大小的完整清單,包括 [資源磁碟大小] 資料行。 描述 VM 大小的文章具有具有 Temp 儲存體 資料行的數據表。 如需詳細資訊,請參閱 計算優化的虛擬機大小。 如需範例大小數據表,請參閱 Fsv2 系列

您可以為每個工作所寫入的檔案指定保留時間。 保留時間會決定在自動清除工作檔案之前保留工作檔案的時間長度。 您可以減少保留時間以降低記憶體需求。

如果暫存磁碟或OS磁碟用盡空間,或接近用盡空間,則節點會移至 unusablecomputeNoteState,而節點錯誤表示磁碟已滿。

如果您不確定節點上佔用的空間,請嘗試從遠端連線到節點並手動調查。 您也可以使用 [ 檔案 - 從計算節點 API 列出] 來檢查 Batch 受控資料夾中的檔案,例如工作輸出。 此 API 只會列出 Batch 受控目錄中的檔案。 如果您的工作已建立其他地方的檔案,此 API 不會顯示它們。

請務必從節點擷取任何您需要的數據,或將其上傳至長期存放區之後,您可以視需要刪除數據以釋放空間。

您可以刪除工作資料仍在節點上的舊已完成作業或工作。 在 recentTasks 節點上的 taskInformation 中查看集合,或使用 [從計算節點 API 列出檔案 - 列表]。 刪除作業會刪除作業中的所有工作。 刪除作業中的工作會觸發刪除節點上工作目錄中的數據,並釋出空間。 釋放足夠的空間之後,請重新啟動節點。 節點應該移出 unusable 狀態,然後再移入 idle

若要在 VirtualMachineConfiguration 集區中復原無法使用的節點,您可以使用集區 - 移除節點 API,從集區中移除節點。 然後,您可以再次成長集區,以全新的節點取代錯誤的節點。 針對 CloudServiceConfiguration 集區,您可以使用計算節點 - 重新映像 API 來重新設定節點 的映像 ,以清除整個磁碟。 VirtualMachineConfiguration 集區目前不支援重新映像。

下一步