為什麼我的 AWS Batch 工作會停滯於「可執行」狀態?

3 分的閱讀內容
0

我的 AWS Batch 工作停滯於「可執行」狀態。

簡短說明

在工作沒有未完成的相依性且可排定至主機時,AWS Batch 會將工作移至「可執行」狀態。在映射至工作佇列的其中一個運算環境中,只要提供足夠的資源,即會立即啟動「可執行」工作。

如果無法使用執行工作所需的資源,則該工作可能無限期保留在「可執行」狀態。如需詳細資訊,請參閱工作停滯於「可執行」狀態

若要對 AWS Batch 工作停滯於「可執行」狀態進行疑難排解,請使用 AWSSupport-TroubleshootAWSBatchJob 執行手冊。然後,請參閱輸出部分以確定問題的可能原因以及修復問題的步驟。

注意: 本文涵蓋了 Amazon Elastic Compute Cloud (Amazon EC2) 上的 Amazon Elastic Container Service (Amazon ECS) 和 AWS Fargate 上的 Amazon ECS 的疑難排解。若要疑難排解 Amazon Elastic Kubernetes Service (Amazon EKS) 上的 AWS Batch,請參閱 Amazon EKS 上的 AWS Batch

解決方法

使用 AWSSupport-TroubleshootAWSBatchJob SAW 執行手冊

使用 AWS Support 自動化工作流程 (AWS SAW) 來自動執行此疑難排解程序。若要使用 AWSSupport-TroubleshootAWSBatchJob 執行手冊,請參閱如何使用 SAW 執行手冊對我的 AWS Batch 工作停滯於「可執行」狀態進行疑難排解?

如果此執行手冊無法幫助您識別問題,請參閱下列各節以手動對停滯的工作進行疑難排解。

確認您的運算環境具有足夠的資源來執行您的工作

1.    開啟 AWS Batch 主控台

2.    選擇儀表板

3.    在工作佇列概述窗格的可執行資料欄中,選擇停滯於可執行狀態的工作。此時會顯示工作詳細資料頁面。

4.    在工作詳細資料頁面的容器區段中,檢閱 vCPU記憶體GPU 的值。您需要這些值才能完成步驟 9 到 10。

5.    在工作佇列頁面上,選取工作佇列並檢閱其相關聯的運算環境,因為任何運算環境都可能會執行您的工作。接下來,對每個運算環境重複步驟 6 到 10。

6.    在運算環境頁面上,選取要檢閱其許可的運算環境。

7.    確認運算環境的狀態資料欄已設為**有效。**此外,請確保與環境相關聯的服務角色具有所有必要權限

注意: 發生間歇性或暫時性錯誤時,運算環境狀態可能需要幾分鐘的時間才能從有效變更為無效

8.    確認狀態資料欄已設為已啟用

9.    確認 vCPU 數量上限值夠高,可讓 AWS Batch 增加執行工作所需 vCPU 的數量。

注意: 如果您使用的是 AWS Fargate 運算環境,則請參閱確認運算環境的網路和安全設定區段。

10.    確認所需 vCPU 值等於或高於工作執行所需的 vCPU 數量。

如果「所需 vCPU」為「0」,則檢查可用於您的 Amazon EC2 執行個體類型的記憶體和 CPU 資源數量。

-或-

如果所需 vCPU 高於 0,或者您的工作仍處於可執行狀態,請完成下一個區段中的步驟。

**重要:**至少您的運算環境的一種執行個體類型必須具有比您的工作指定的記憶體更多的記憶體。此外,執行個體類型的 CPU 資源數必須等於或大於您的工作指定的 CPU 資源數。如果至少一種執行個體類型沒有足夠的記憶體或 CPU 資源來執行您的工作,則取消工作。執行需要較少 CPU 或記憶體的新工作。或者,建立具有足夠資源來執行工作的新運算環境,然後將工作指派給適當的工作佇列。

確認您的運算環境具有執行個體,並且執行個體可用於執行您的工作

針對您識別為必須執行工作的運算環境,請完成下列步驟:

1.    開啟 Amazon ECS 主控台

2.    在導覽窗格中,選擇叢集。然後,選擇包含工作的叢集。

如需一般 ECS 疑難排解指示,請參閱 Amazon ECS 疑難排解

注意: 叢集的名稱以運算環境的名稱開頭。後面接著 _Batch_ 及數字和字母的隨機雜湊。

3.    選擇 ECS 執行個體視圖。然後,確認容器執行個體可用於執行您的工作。

4.    如果叢集具有可用於執行工作的容器執行個體,則檢查 Docker 常駐程式的狀態。然後,檢查 Amazon ECS 容器代理程式的狀態。

注意: 如需詳細資訊,請參閱如何疑難排解已中斷連接的 Amazon ECS 代理程式?

如果 Amazon ECS 叢集中沒有執行個體,則請確認是否可以在運算環境中建立執行個體。若要確認是否可以建立執行個體,請根據您的運算環境完成下列其中一個程序。

若要確認是否可以在隨需運算環境中建立執行個體,請執行下列動作:

1.    開啟 Amazon EC2 主控台

2.    在左側導覽窗格中,選擇 Auto Scaling 群組

3.    針對篩選條件,輸入運算環境的名稱。

注意: Amazon EC2 可以為相同的運算環境建立多個 Auto Scaling 群組。

4.    針對每個 Auto Scaling 群組,選擇活動歷史記錄視圖。然後,尋找任何封鎖問題。

如果存在任何封鎖執行個體啟動的問題,狀態資料欄將會顯示失敗

例如,如果您的帳戶達到執行個體數量上限,則 Amazon EC2 可能會傳回類似下列範例的訊息:

Launching a new EC2 instance. Status Reason: Your quota allows for 0 more running instance(s). You requested at least 1. Launching EC2 instance failed.

此事件包含從您提交工作時起的時間戳記 (UTC):

At 2018-09-03T05:54:30Z a user request update of AutoScalingGroup constraints to min: 0, max: 1, desired: 1 changing the desired capacity from 0 to 1.
At 2018-09-03T05:54:52Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1.

注意: AWS Batch 代表您請求執行個體。如果您手動修改 Auto Scaling 群組,則您的運算環境可能會失效。如需執行個體限制以及如何請求提高限制的相關資訊,請參閱 Amazon EC2 服務配額

5.    如果 Auto Scaling 群組僅顯示最近事件中的成功事件,則請完成下列區段中的步驟。

**重要:**必須為服務連結的 AWS Identity and Access Management (IAM) 角色 AWSServiceRoleForAutoScaling 設定特定許可。IAM 角色 AWSServiceRoleForAutoScaling 必須至少具有對客戶自管 AWS Key Management Service (AWS KMS) 金鑰的使用者存取權。這對在具有自訂 Amazon Machine Image (AMI)、加密的 Amazon Elastic Block Store (Amazon EBS) 磁碟區和客戶自管 AWS KMS 金鑰的環境中是必要的。如需詳細資訊,請參閱允許存取客戶自管金鑰的金鑰政策區段

若要確認是否可以在 Spot 運算環境中建立執行個體,請執行下列動作:

1.    開啟 Amazon EC2 主控台

2.    在導覽窗格中,選擇執行個體。然後,選擇 Spot 請求

3.    在篩選條件中,針對請求類型,選擇機群

4.    在狀態中,選擇作用中

5.    選擇描述。然後,檢閱目標容量總計值,以查看是否已滿足 Spot 執行個體請求。如果沒有建立任何執行個體,則請檢查歷史記錄視圖以查看解釋原因的訊息。例如,無法達到競價的請求會傳回類似下列範例的訊息:

m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324

6.    為您的運算環境選擇適當的競價百分比。如果您變更競價,請確保建立新的運算環境。如需詳細資訊,請參閱 Spot 執行個體定價歷史記錄

注意: AWS Batch 會代表您建立 Spot 機群請求。避免手動修改 Spot 機群請求,否則您的運算環境可能會無效。

7.    如果 Auto Scaling 群組的最新事件僅顯示成功事件,則請完成下一個區段中的步驟。

確認容器執行個體 IAM 角色

1.    開啟 AWS Batch 主控台

2.    在導覽窗格中,選擇運算環境。然後,選擇您的運算環境。

3.    在運算環境詳細資料區段中,複製執行個體角色名稱。

4.    開啟 IAM 主控台

5.    在搜尋欄位中,輸入執行個體角色名稱。然後,從結果中選擇您的執行個體角色。

6.    選擇許可視圖。然後,確認 AmazonEC2ContainerServiceforEC2Role 受管政策已連接至角色。如果已連接政策,則表示您的執行個體角色已正確設定,您可以跳至步驟 11。

7.    選擇連接政策

8.    在搜尋欄位中,輸入 AmazonEC2ContainerServiceforEC2Role

9.    在 AmazonEC2ContainerServiceforEC2Role 政策中,選取核取方塊。然後,選擇連接政策

10.    選擇信任關係視圖。然後,選擇編輯信任關係

11.    確認信任關係包含下列政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

12.    如果信任關係符合上述範例中的政策,請選擇取消

-或-

如果信任關係與上述範例中的政策不符,請將此政策複製到政策文件主控台。然後,選擇更新信任政策

如果您的執行個體仍未加入 Amazon ECS 叢集,則請完成下一節中的步驟。

確認運算環境的網路和安全設定

1.    開啟 AWS Batch 主控台

2.    在導覽窗格中,選擇運算環境。然後,選擇您的運算環境。

3.    在運算資源區段中,複製子網路安全群組值。

4.    開啟 Amazon Virtual Private Cloud (Amazon VPC) 主控台

5.    在導覽窗格中,選擇子網路

6.    針對運算環境中的每個子網路,選擇說明。然後,檢閱自動指派公有 IPv4 地址值。

如果自動指派公有 IPv4 地址值為,則在子網路中啟動的執行個體具有下列屬性:

  • 公有 IPv4 地址
  • 路由目的地為 0.0.0.0/0 的路由表
  • 設為目標的網際網路閘道 (例如:igw-1a2b3c4d)

如果自動指派公有 IPv4 地址值為,則在子網路中啟動的執行個體具有下列屬性:

  • 私有 IPv4 地址
  • 路由目的地為 0.0.0.0/0 的路由表
  • 設為目標的 NAT 閘道 (例如:nat-12345678901234567)。

注意: 如需詳細資訊,請參閱範例中的路由區段: 具有私人子網路和 NAT 中的伺服器的 VPC

7.    在導覽窗格中,選擇安全群組

8.    針對在運算環境中指定的每個安全群組,選擇出埠規則視圖。然後,確認存在具有下列設定的規則:

  • 針對類型,選擇所有流量
  • 針對通訊協定中,選擇全部
  • 針對連接埠範圍中,選擇全部
  • 針對目的地,選擇 0.0.0.0/0

重要:如果規則不存在,請選擇編輯。然後,建立規則。如需更嚴格的出埠流量規則,請選擇為類型選擇 HTTPS (443),為目的地選擇 0.0.0.0/0

9.    在導覽窗格中,選擇網路 ACL

10.    選擇 VPC 的網路存取控制清單 (網路 ACL)。

11.    確認預設網路 ACL 設定為允許所有流量流入和流出相關聯的子網路。

**重要:**如果您修改了 ACL,請新增允許從子網路至網際網路的出埠 IPv4 HTTPS 流量的規則。如需詳細資訊,請參閱使用安全群組控制 EC2 執行個體的流量使用網路 ACL 控制子網路的流量。若要變更 VPC、子網路或安全群組,請建立新的運算環境。

如果您的執行個體仍未加入 Amazon ECS 叢集,請連線至執行個體。然後,檢查 Docker 常駐程式和 Amazon ECS 容器代理程式的狀態。

注意: 本文中的程序並未涵蓋所有可能的根本原因以及疑難排解的方法。若要針對停滯於**「可執行」狀態的 AWS Batch 工作進一步疑難排解,請使用 AWS CloudTrail。查詢使用者名稱**屬性設定為 aws-batch 的事件,以調查排程工作期間發生的錯誤。

相關資訊

連線至 Linux 執行個體

連線至 Windows 執行個體

AWS 官方
AWS 官方已更新 6 個月前