跳至內容

如何對卡在「可執行」狀態的 AWS Batch 作業進行疑難排解?

5 分的閱讀內容
0

我的 AWS Batch 作業卡在「可執行」狀態。

簡短描述

當 AWS Batch 的作業沒有任何擱置中的相依性,且 AWS Batch 可以排程該作業時,系統會將作業移至可執行狀態可執行狀態的作業會在任一個與作業佇列對應的運算環境中有足夠資源可用時立即開始執行。

如果執行作業所需的資源不可用,則作業可能會持續卡在「可執行」狀態

**注意:**以下解決方法適用於對在 Amazon Elastic Container Service (Amazon ECS) 容器中執行的 AWS Batch 作業進行疑難排解。這些容器可以在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體或 AWS Fargate 運算環境上執行。若要疑難排解在 Amazon Elastic Kubernetes Service (Amazon EKS) 上執行的 AWS Batch 作業,請參閱 Amazon EKS 上的 AWS Batch

解決方法

先確認卡住的作業是否封鎖了先進先出 (FIFO) 佇列。如果這無法解決您的問題,請選擇自動化疑難排解流程以找出問題,或手動進行疑難排解。

檢查是否有 FIFO 佇列遭到封鎖

作業可能會在先進先出 (FIFO) 佇列的開頭卡在可執行狀態,原因如下:

  • 作業未使用公平共用排程,導致後方所有其他作業無法執行。
  • 您的 AWS 帳戶中存在組態錯誤。
  • 您的帳戶沒有存取作業所需執行個體的權限。例如,您的帳戶可能需要 GPU 執行個體類型。

若要解除 FIFO 佇列封鎖,請使用 GetJobQueueSnapshot 找出封鎖佇列的作業,然後關閉該作業

自動化疑難排解流程

使用 AWSSupport-TroubleshootAWSBatchJob 執行手冊,對卡在可執行狀態的 AWS Batch 作業進行疑難排解。或依照以下章節中的步驟手動疑難排解問題。

檢查您的運算環境是否有足夠資源執行作業

請完成下列步驟:

  1. 開啟 AWS Batch console (AWS Batch 主控台)。
  2. 在導覽窗格中,選擇 Dashboard (儀表板)。
  3. Job queue overview(作業佇列概觀) 區段中,於 RUNNABLE (可執行) 欄選取卡在 可執行 狀態的作業。系統會顯示該作業的詳細資料頁面。
  4. 選擇 Containers(容器) 索引標籤,然後記下 vCPUsMemoryGPUs 的值,以完成步驟 9–10。
  5. 在導覽窗格中,選擇 Job queues(作業佇列),然後選擇您的作業佇列。
  6. Environment order(環境順序) 索引標籤上,確認與您的作業佇列相關聯的運算環境。
  7. 在導覽窗格中,選擇 Environments (環境),然後選取一個運算環境以檢閱其權限。
  8. Status (狀態) 區段中,確認運算環境的 Status (狀態) 欄為 Valid (有效)。
    注意:當出現間歇性或暫時性錯誤時,運算環境的狀態可能需要幾分鐘才會從有效變更為無效
  9. Details (詳細資料) 索引標籤上,確認與該環境關聯的服務角色具備所有必要權限
  10. Status (狀態) 區段中,確認 State (狀態) 欄為啟用
  11. Compute resources (運算資源) 索引標籤上,檢查 Maximum vCPUs (vCPU 上限) 的值。此值必須夠高,使 AWS Batch 能增加 Desired vCPUs (所需的 vCPU 數量) 來執行作業。
    注意:如果您使用的是 Fargate 運算環境,請參閱檢查運算環境的網路與安全性設定章節。
  12. 確認 Desired vCPUs (所需 vCPU 數量) 的值等於或高於作業執行所需的 vCPU 數量。
  13. 如果 Desired vCPUs (所需 vCPU 數量) 為 0,請檢查 Amazon EC2 執行個體類型是否有足夠的記憶體與 CPU 資源。如果 Desired vCPUs (所需 vCPU 數量) 高於 0,或您的作業仍處於可執行狀態,請完成下一節的步驟。

對每個運算環境重複步驟 6–14。

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

確認您的運算環境中有執行個體,且這些執行個體可用來執行您的作業

針對執行作業的運算環境,請依照下列步驟操作:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 在導覽窗格中,選擇 Clusters (叢集),然後選取包含您作業的叢集。
    **注意:**叢集名稱會以運算環境名稱開頭,接著是 _Batch_,以及一組隨機的英數雜湊值。
  3. 選擇 Infrastructure (基礎結構) 索引標籤。
  4. Container instances (容器執行個體) 區段中,找到您的容器執行個體,並確認這些容器執行個體可用來執行您的作業。

如果叢集中有可用的容器執行個體來執行您的作業,請檢查 Docker 常駐程式Amazon ECS 容器代理程式的狀態。如需更多資訊,請參閱如何疑難排解已中斷連線的 Amazon ECS 代理程式

如果 Amazon ECS 叢集中沒有任何執行個體,請檢查您是否可以在運算環境中建立執行個體。

隨需運算環境

請完成下列步驟:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。

  2. 在導覽窗格中選擇 Auto Scaling (自動擴展),然後選擇 Auto Scaling Groups (Auto Scaling 群組)。

  3. 在搜尋框中輸入您的運算環境名稱,然後選取您的運算環境。
    **注意:**Amazon EC2 可能會為同一個運算環境建立多個 Auto Scaling 群組。

  4. 對於每個 Auto Scaling 群組,選擇 Activity (活動) 索引標籤,然後在 Activity history (活動歷史記錄) 區段中尋找封鎖問題。
    **注意:**當有問題導致執行個體無法啟動時,Status (狀態) 欄會顯示 Unsuccessful (失敗)。
    例如,如果您的帳戶已達到執行個體數量上限,Amazon EC2 可能會回傳類似以下訊息:
    「正在啟動新的 EC2 執行個體。狀態原因: 您的配額只允許再執行 0 個執行個體。您至少請求了 1 個執行個體。啟動 EC2 執行個體失敗。」
    事件包含您提交作業時的 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 服務配額

如果 Auto Scaling 群組在 Recent events (近期事件) 中僅顯示成功事件,請完成檢查容器執行個體的 IAM 角色章節中的步驟。

**重要:**您必須為 AWSServiceRoleForAutoScaling AWS Identity and Access Management (IAM) 服務角色設定權限。AWSServiceRoleForAutoScaling IAM 角色必須能存取客戶自管的 AWS Key Management Service (KMS) 金鑰。這在使用自訂 Amazon Machine Image (AMI)、加密的 Amazon Elastic Block Store (Amazon EBS) 磁碟區,以及客戶自管的 AWS KMS key 的環境中是必要的。如需更多資訊,請參閱允許存取客戶自管金鑰的金鑰政策章節

Spot 運算環境

請完成下列步驟:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。
  2. 在導覽窗格中,選擇 Spot Requests (Spot 請求)。
  3. 選擇 Request type (請求類型),然後選擇 Request type = fleet (請求類型 = 機群)。
  4. 選取您的 Spot 請求。
  5. Status (狀態),選擇 Active (啟用)。
  6. 選擇 Description (描述),然後檢閱 Total target capacity (總目標容量) 的值,以確認 Spot 執行個體請求是否已完成。如果沒有任何執行個體,請檢查 History (歷史記錄) 檢視,以了解原因。
    例如,無法達到出價價格的請求會回傳類似以下訊息:
    「m4.large, ami-aff65ad2, Linux/UNIX (Amazon VPC), us-east-1a, Spot bid price is less than Spot market price $0.0324」
  7. 為您的運算環境選擇適當的出價百分比。如果您更改了出價,請確保建立新的運算環境。如需更多資訊,請參閱 Spot 執行個體價格歷史記錄
    **注意:**AWS Batch 會代表您建立 Spot 機群請求。請勿手動修改 Spot 機群請求,否則您的運算環境可能會無效。

如果 Auto Scaling 群組的最新事件僅顯示成功事件,請完成下一章節的步驟。

檢查容器執行個體的 IAM 角色

請完成下列步驟:

  1. 開啟 AWS Batch console (AWS Batch 主控台)。
  2. 在導覽窗格中,選擇 Environments (環境),然後選取您的運算環境。
  3. Details (詳細資料) 索引標籤上,記下 Instance role (執行個體角色) 名稱。
  4. 開啟 IAM console (IAM 主控台)。
  5. 在搜尋框方塊輸入 Instance role (執行個體角色) 名稱,然後選取您的執行個體角色。
  6. 選擇 Permissions (權限) 索引標籤。在 Permissions policies (權限政策) 區段中,確認您是否將 AmazonEC2ContainerServiceforEC2Role 受管政策附加到該角色。如果已附加該政策,則進行步驟 11。
  7. 選擇 Add permissions (新增權限),然後選擇 Attach policies (附加政策)。
  8. Other permissions policies (其他權限政策) 區段,在搜尋框中輸入 AmazonEC2ContainerServiceforEC2Role
  9. 選取 AmazonEC2ContainerServiceforEC2Role,然後選擇 Add permissions (新增權限)。
  10. 選擇 Trust relationships (信任關係) 索引標籤,然後選擇 Edit trust policy (編輯信任政策)。
  11. 確認信任政策包含以下陳述式:
{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. 如果信任政策包含上述陳述式,請選擇 Cancel (取消)。如果信任政策不包含上述陳述式,請將該陳述式加入您的政策。然後選擇 Update policy (更新政策)。

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

檢查運算環境的網路與安全性設定

請完成下列步驟:

  1. 開啟 AWS Batch console (AWS Batch 主控台)。
  2. 在導覽窗格中,選擇 Environments (環境),然後選取您的運算環境。
  3. Compute resources (運算資源) 區段,記下 Subnets (子網路) 與 Security groups (安全群組) 的值。
  4. 開啟 Amazon Virtual Private Cloud (Amazon VPC) console (Amazon Virtual Private Cloud (Amazon VPC) 主控台)。
  5. 在導覽窗格中,選擇 Subnets (子網路)。
  6. 選取運算環境中的每個子網路,然後在 Details (詳細資料) 索引標籤上確認 Auto-assign public IPv4 address (自動指派公共 IPv4 位址) 的值。
    如果 Auto-assign public IPv4 address (自動指派公共 IPv4 位址) 的值為 Yes,則在該子網路中啟動的執行個體具有以下屬性:
    一個公共 IPv4 位址
    路由表的目的地為 0.0.0.0/0
    設定為目標的網際網路閘道,例如 igw-1a2b3c4d
    如果 Auto-assign public IPv4 address (自動指派公共 IPv4 位址) 的值為 No,則在該子網路中啟動的執行個體具有以下屬性:
    一個私有 IPv4 位址
    路由表的目的地為 0.0.0.0/0
    設定為目標的 NAT 閘道,例如 nat-12345678901234567
    **注意:**如需更多資訊,請參閱路由
  7. 在導覽窗格中,選擇 Security groups (安全群組)。
  8. 在運算環境中的每個安全群組,選擇 Outbound rules (傳出規則) 索引標籤。然後,確認是否存在具有以下設定的規則:
    Type (類型),選擇 All traffic (所有流量)。
    Protocol (通訊協定),選擇 All (全部)。
    Port range (連接埠範圍),選擇 All (全部)。
    Destination (目的地),選擇 0.0.0.0/0
    **重要:**如果規則不存在,請選擇 Actions (動作),然後選擇 Edit outbound rules (編輯傳出規則)。接著,建立該規則。如需更嚴格的傳出流量規則,請為 Type (類型) 選擇 HTTPS (443),並為 Destination (目的地) 選擇 0.0.0.0/0
  9. 在導覽窗格中,選擇 Network ACLs (網路 ACL)。
  10. 選取 VPC 的網路存取控制清單 (網路 ACL)。
  11. Inbound rules (傳入規則) 和 Outbound rules (傳出規則) 索引標籤上,確認網路 ACL 允許所有流量進出關聯的子網路。

**重要:**如果您修改了網路 ACL,請新增一條規則,允許子網路對網際網路的傳出 IPv4 HTTPS 流量。如需更多資訊,請參閱使用安全群組控制 AWS 資源流量使用網路存取控制清單控制子網路流量。若要變更 VPC、子網路或安全群組,請建立新的運算環境。

如果您的執行個體仍無法加入 Amazon ECS 叢集,請連線至您的執行個體。檢查 Docker 常駐程式Amazon ECS 容器代理程式的狀態。如需更多資訊,請參閱如何疑難排解已中斷連線的 Amazon ECS 代理程式

注意:若要進一步對處於可執行狀態的 AWS Batch 作業進行疑難排解,請使用 AWS CloudTrail。將 Username 屬性設為 aws-batch,以搜尋排程作業期間發生的錯誤。

相關資訊

使用 SSH 連線至 Linux 執行個體

使用 RDP 連線至 Windows 執行個體

推出新的警示,以協助使用者偵測並回應 AWS Batch 中封鎖的作業佇列

AWS Batch 推出作業佇列快照,以檢視佇列前端的作業

AWS 官方已更新 4 個月前