Azure Batch 集區和節點錯誤
一些 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 Compute Gallery 建立集區。
自動調整失敗
您可以將 Azure Batch 設定為自動調整集區中的節點數目,並定義集區自動調整公式的參數。 Batch 服務會接著使用此公式定期評估集區中的節點數目,並設定新的目標數目。 如需詳細資訊,請參閱建立自動公式以調整 Batch 集區中的計算節點。
當您使用自動調整時,可能會發生下列問題:
- 自動調整評估失敗。
- 產生的調整大小作業失敗並逾時。
- 自動調整公式的問題會導致不正確的節點目標值。 調整大小可能會正常運作或逾時。
若要取得上次自動調整評估的資訊,請使用 autoScaleRun 屬性。 此屬性會報告評估時間、值和結果,以及任何效能錯誤。
集區調整大小完成事件會擷取所有評估的相關資訊。
集區刪除失敗
若要刪除包含節點的集區,Batch 會先刪除節點,這可能需要幾分鐘的時間才能完成。 然後,Batch 會刪除集區物件本身。
Batch 會在刪除程序期間將 poolState 設定為 deleting
。 呼叫的應用程式可以使用 state
和 stateTransitionTime
屬性來偵測集區刪除是否花費太長的時間。
如果集區刪除花費的時間超過預期,Batch 會定期重試,直到成功刪除集區為止。 在部分案例中,延遲是 Azure 服務中斷或其他暫時性問題導致。 防止成功刪除集區的其他因素,可能需要您採取動作來修正問題。 這些因素可能包括下列問題:
資源鎖定可能會放置在 Batch 建立的資源上,或放在 Batch 所使用的網路資源上。
您所建立的資源可能取決於 Batch 建立的資源。 例如,如果您在虛擬網路中建立集區,則 Batch 會建立 NSG、公用 IP 位址和負載平衡器。 如果您在集區外部使用這些資源,則無法刪除集區。
Microsoft.Batch
資源提供者可能會從包含集區的訂用帳戶取消註冊。針對使用者訂用帳戶模式 Batch 帳戶,
Microsoft Azure Batch
可能不再具有包含集區之訂用帳戶的參與者或擁有者角色。 如需詳細資訊,請參閱允許 Batch 存取訂用帳戶。
節點錯誤
即使 Batch 在集區中成功配置了節點,仍有各種問題可能導致某些節點狀況不良且無法執行工作。 這些節點仍會產生費用,因此請務必偵測問題,以避免對您無法使用的節點付費。 了解常見的節點錯誤,以及了解目前的 jobState 對於疑難排解很有用。
開始工作失敗
您可以指定集區的選擇性 startTask。 如同任何工作,啟動工作會使用命令列,且可以從儲存體下載資源檔案。 當節點啟動時,啟動工作會針對每個節點執行。 waitForSuccess
屬性會指定 Batch 是否應等到「開始工作」順利完成後,再為節點排定任何工作。 如果您將節點設定為等候啟動工作成功完成但啟動工作失敗,則節點無法使用,但仍會產生費用。
您可以使用最上層 startTaskInformation 節點屬性的 taskExecutionResult 和 taskFailureInformation 屬性來偵測啟動工作失敗。
如果 waitForSuccess
設定為 true
,則失敗的啟動工作也會讓 Batch 將 computeNodeState 設定為 starttaskfailed
。
如同任何工作,啟動工作失敗的原因很多。 若要進行疑難排解,請檢查 stdout、stderr 及任何其他工作特定記錄檔。
開始工作必須重新進入,因為啟動工作可以在相同的節點上執行多次,例如當節點重新安裝映像或重新啟動時。 在罕見的情況下,當啟動工作在事件發生之後執行時,會導致節點重新啟動、一個作業系統 (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 映像已部署在不支援 VM 映像的硬體上。
- VM 位於 Azure 虛擬網路,且流量已封鎖到主要連接埠。
- VM 位於虛擬網路中,但對 Azure 儲存體的連出流量遭到封鎖。
- VM 位於具有客戶 DNS 設定的虛擬網路中,且 DNS 伺服器無法解析 Azure 儲存體。
節點代理程式記錄檔
在每個集區節點上執行的 Batch 代理程式處理序會提供記錄檔,在您需要連絡支援人員來解決集區節點問題時,可能有所幫助。 您可以透過 Azure 入口網站、Batch Explorer 或計算節點 - 上傳 Batch 服務記錄 API 上傳節點的記錄檔。 上傳並儲存記錄檔之後,您可以刪除節點或集區,以節省執行節點的成本。
節點磁碟已滿
Batch 會使用節點集區 VM 上的暫存磁碟機來儲存檔案,例如下列作業檔案、工作檔案和共用檔案:
- 應用程式封裝檔案
- 工作資源檔
- 應用程式專用的檔案已下載至其中一個 Batch 資料夾
- 每個工作應用程式執行的 Stdout 和 Stderr 檔案
- 應用程式專用的輸出檔
應用程式封裝或啟動工作資源檔案等檔案只有在 Batch 建立集區節點時才會寫入一次。 即使它們只寫入一次,但如果這些檔案太大,還是可以填滿暫存磁碟機。
其他檔案,例如 stdout 和 stderr,都會針對節點執行的每個工作寫入。 如果在相同的節點上執行大量工作,或工作檔案太大,則可能會填滿暫存磁碟機。
節點在 OS 磁碟上也需要少量的空間,才能在啟動之後建立使用者。
暫存磁碟機的大小取決於 VM 大小。 挑選 VM 大小時有個考量是,確保暫存磁碟有足夠的空間,可以規劃工作負載。
當您在 Azure 入口網站中新增集區時,可以顯示 VM 大小的完整清單,包括 [資源磁碟大小] 資料行。 描述 VM 大小的文章具有包含 [暫存儲存體] 資料行的資料表。 如需詳細資訊,請參閱計算最佳化的虛擬機器大小。 如需範例大小資料表,請參閱 Fsv2 系列。
您可以為每個工作所寫入的檔案指定保留時間。 保留時間會決定在自動清除工作檔案之前保留工作檔案的時間長度。 您可以減少保留時間以降低儲存體需求。
如果暫存磁碟或 OS 磁碟用盡空間,或即將用盡空間,則節點會移至 unusable
computeNoteState,且節點錯誤表示磁碟已滿。
如果您不確定節點上佔用空間的內容,請嘗試從遠端連線至節點並手動調查。 您也可以使用檔案 - 從計算節點列出 API 來檢查 Batch 受控資料夾中的檔案,例如工作輸出。 此 API 只會列出 Batch 管理目錄中的檔案。 如果您的工作已在其他地方建立檔案,此 API 不會顯示它們。
確認從節點擷取任何您需要的資料,或將其上傳至長期存放區之後,您便可以視需要刪除資料以釋放空間。
您可以刪除工作資料仍在節點上的舊完成作業或工作。 在節點上的 taskInformation 中查看 recentTasks
集合,或使用檔案 - 從計算節點 API 列出 API。 刪除作業會刪除作業中的所有工作。 刪除作業中的工作會觸發刪除節點上工作目錄中的資料,並釋出空間。 釋放足夠的空間之後,請重新啟動節點。 節點應該從 unusable
狀態移出,然後再次進入 idle
。
若要在 VirtualMachineConfiguration 集區中復原無法使用的節點,您可以使用集區 - 移除節點 API,從集區移除節點。 接著,您可以再次擴增集區,將錯誤的節點取代為全新的節點。
重要
VirtualMachineConfiguration 集區目前不支援重新安裝映像。