本頁說明如何解決 Batch 的問題。
如要排解沒有錯誤訊息的工作問題,請先查看狀態事件,確認工作記錄中是否有任何錯誤訊息,再參閱本文。
如要進一步瞭解如何排解工作問題,請參閱下列文件:
工作建立錯誤
如果無法建立工作,可能是因為本節中的其中一項錯誤。
配額不足
問題
嘗試建立工作時發生下列其中一個問題:
工作處於
QUEUED
狀態時,statusEvents
欄位會顯示下列問題:Quota checking process decides to delay scheduling for the job JOB_UID due to inadequate quotas [Quota: QUOTA_NAME, limit: QUOTA_LIMIT, usage: QUOTA_CURRENT_USAGE, wanted: WANTED_QUOTA.].
這項問題表示,由於
QUOTA_NAME
配額的目前用量 (QUOTA_USAGE
) 和上限 (QUOTA_LIMIT
) 阻止了工作要求的用量 (WANT_QUOTA
),因此工作遭到延遲。如果工作處於
QUEUED
、SCHEDULED
或FAILED
狀態,statusEvents
欄位會顯示下列其中一個問題:RESOURCE_NAME creation failed: Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in region REGION
RESOURCE_NAME creation failed: Quota QUOTA_NAME exceeded. Limit: QUOTA_LIMIT in zone ZONE
這個問題表示建立資源失敗,因為要求超出
QUOTA_NAME
配額,而指定位置的配額上限為QUOTA_LIMIT
。
解決方案
如要解決這個問題,請按照下列步驟操作:
如果工作遭到延遲,請等待更多配額釋出。
如果工作因配額不足而失敗,或延遲時間過長,請嘗試採取下列任一做法,避免配額不足:
建立使用較少配額或不同配額的工作。 例如,為工作指定其他允許的位置或資源類型,或在其他專案中分配配額用量。
透過 Google Cloud為專案要求提高配額限制。
權限不足,無法以服務帳戶身分執行操作
問題
嘗試建立工作時發生下列問題:
如果工作未使用執行個體範本,問題會顯示如下:
caller does not have access to act as the specified service account: SERVICE_ACCOUNT_NAME
如果工作使用執行個體範本,問題會顯示如下:
Error: code - CODE_SERVICE_ACCOUNT_MISMATCH, description - The service account specified in the instance template INSTANCE_TEMPLATE_SERVICE_ACCOUNT doesn't match the service account specified in the job JOB_SERVICE_ACCOUNT for JOB_UID, project PROJECT_NUMBER
發生這個問題通常是因為建立工作的使用者沒有足夠的權限,無法以工作使用的服務帳戶身分執行動作,而這項權限是由 iam.serviceAccounts.actAs
權限控管。
解決方案
如要解決這個問題,請按照下列步驟操作:
- 如果作業使用執行個體範本,請確認執行個體範本中指定的服務帳戶,與作業定義中指定的服務帳戶相符。
- 請確認建立工作的使用者已獲得工作指定服務帳戶的「服務帳戶使用者」角色 (
roles/iam.serviceAccountUser
)。詳情請參閱「管理存取權」。 - 重新建立工作。
重複的網路
問題
嘗試建立工作時發生下列問題:
Networks must be distinct for NICs in the same InstanceTemplate
發生這個問題的原因是您為工作指定網路時,重複指定了多次。
解決方案
如要解決這個問題,請重新建立工作,並使用下列其中一個選項指定網路:
- VM 執行個體範本:如要在建立這項作業時使用 VM 執行個體範本,請務必在 VM 執行個體範本中指定網路。
network
和subnetwork
欄位: 使用 Batch API 建立作業時,這些欄位可用於要求主體;使用 gcloud CLI 建立作業時,這些欄位可用於 JSON 設定檔。--network
和--subnetwork
旗標: 使用 gcloud CLI 建立工作時,這些旗標可與gcloud batch jobs submit
指令搭配使用。
詳情請參閱為工作指定網路。
VPC Service Controls 的網路無效
問題
嘗試建立工作時發生下列問題:
no_external_ip_address field is invalid. VPC Service Controls is enabled for the project, so external ip address must be disabled for the job. Please set no_external_ip_address field to be true
解決方案
發生這個問題的原因是,您嘗試在 VPC Service Controls 服務範圍中,使用具有外部 IP 位址的 VM 建立及執行作業。
如要解決這個問題,請建立工作,封鎖所有 VM 的外部存取權。
如要進一步瞭解如何在 VPC Service Controls 服務範圍內設定作業的網路,請參閱「搭配 Batch 使用 VPC Service Controls」。
工作問題和失敗錯誤
如果工作無法正常執行或因不明原因失敗,可能是因為本節中的其中一個錯誤,或是下列「工作失敗結束代碼」一節中的其中一個結束代碼。
Cloud Logging 中沒有記錄
問題
您需要偵錯工作,但 Cloud Logging 中沒有顯示該工作的記錄。
這個問題的常見原因如下:
- 您的專案未啟用 Cloud Logging API。 即使您為作業記錄正確設定所有其他項目,如果專案未啟用該服務,作業也不會產生記錄。
- 作業的服務帳戶沒有寫入記錄的權限。權限不足時,工作無法產生記錄。
- 這項工作未設定為產生記錄。如要在 Cloud Logging 中產生記錄,工作必須啟用 Cloud Logging。此外,您也應將工作可執行的項目設定為將要顯示在記錄中的任何資訊,寫入標準輸出 (stdout) 和標準錯誤 (stderr) 串流。詳情請參閱「使用記錄分析工作」。
- 任務未執行。工作必須先指派資源並開始執行,系統才能產生記錄。
- Cloud Logging 已設定為自動排除這項工作的記錄。 如果您已設定 Cloud Logging 的排除篩選器,導致系統排除 Batch 作業的記錄,則 Batch 作業的記錄不會顯示。
解決方案
如要解決這個問題,請按照下列步驟操作:
- 請停用所有Cloud Logging 排除篩選器,確認記錄檔未因停用而自動從 Cloud Logging 中排除。
- 請確認專案已啟用 Cloud Logging API。
- 確認作業的服務帳戶具備記錄寫入者 (
roles/logging.logWriter
) IAM 角色。詳情請參閱「為專案啟用 Batch」一文。 - 使用 gcloud CLI 或 Batch API 查看工作詳細資料。
工作詳細資料可協助您瞭解工作未產生記錄的原因,並提供您希望從記錄中取得的資訊。舉例來說,請執行下列操作:
- 如要確認記錄功能已啟用,請查看作業的
logsPolicy
欄位。 - 如要確認工作是否順利完成,請查看工作的
status
欄位。
- 如要確認記錄功能已啟用,請查看作業的
完成變更後,請重新建立工作,並等待工作執行完畢,再檢查記錄。
沒有服務代理報表
問題
如果工作無法正常執行,或是在建立 VM 前失敗,statusEvents
欄位會顯示下列問題:
No VM has agent reporting correctly within time window NUMBER_OF_SECONDS seconds, VM state for instance VM_NAME is TIMESTAMP,agent,start
這項問題表示作業的 VM 都未向 Batch 服務代理程式回報。
這個問題的常見原因如下:
- 作業的 VM 權限不足。
作業的 VM 必須具備特定權限,才能向 Batch 服務代理程式回報狀態。如要為作業的 VM 提供這些權限,請將 Batch 代理程式回報者角色 (
roles/batch.agentReporter
) 授予作業的服務帳戶。 - 作業的 VM 發生網路問題。作業的 VM 需要網路存取權,才能與 Batch 服務代理程式通訊。
- 作業的 VM 使用過時的 Batch VM OS 映像檔,或使用 Batch 服務代理程式軟體過時的 VM OS 映像檔。 作業的 VM 需要 VM OS 映像檔中的軟體,才能提供目前向 Batch 服務代理程式回報的依附元件。
解決方案
如要解決這個問題,請按照下列步驟操作:
確認作業的 VM 具備向 Batch 服務代理回報狀態的必要權限。
- 如要找出作業的服務帳戶,請使用 gcloud CLI 或 Batch API 查看作業詳細資料。如果沒有列出任何服務帳戶,作業預設會使用 Compute Engine 預設服務帳戶。
確認作業的服務帳戶具有 Batch Agent Reporter 角色 (
roles/batch.agentReporter
) 的權限。詳情請參閱「管理存取權」和「限制服務帳戶的使用方式」。舉例來說,如要授予 Compute Engine 預設服務帳戶必要權限,請使用下列指令:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/batch.agentReporter \ --member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com
如果您為作業指定 VM OS 映像檔,請確認目前支援該 VM OS 映像檔。
如果您為作業啟用 Cloud Logging,可以檢查下列任一代理程式記錄 (
batch_agent_logs
) 來找出這個問題。詳情請參閱「使用記錄分析作業」。Batch 服務代理程式軟體過時錯誤的記錄:
rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_AGENT_VERSION: outdated Batch agent version used.
BATCH_AGENT_VERSION 是與 Batch 服務代理通訊的軟體版本,工作會使用這個版本,例如
cloud-batch-agent_20221103.00_p00
。過時的 Batch VM OS 映像檔錯誤記錄:
rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_VM_OS_IMAGE_NAME: outdated Batch image version.
BATCH_VM_OS_IMAGE_NAME 是作業的 Batch VM OS 映像檔特定版本,例如
batch-debian-11-20220909-00-p00
。
使用較新的 VM OS 映像檔即可解決這個問題。 如果作業使用自訂映像檔,請根據支援的最新版公開映像檔重新建立自訂映像檔。
詳情請參閱「支援的 VM OS 映像檔」和「查看 VM OS 映像檔」。
重新建立工作。
Cloud Monitoring 中缺少資源指標
問題
您想查看作業的資源指標,但缺少部分或所有預期指標。
這個問題的常見原因如下:
- 專案未啟用 API。 即使您在專案中正確設定所有其他項目,資源指標可能也不會顯示,直到啟用 Cloud Monitoring API 為止。如果是 Ops 代理程式,您也必須啟用 Cloud Logging API。
- 您的權限不足,無法查看指標。權限不足時,您無法查看指標。
- 作業的 VM 未執行。工作必須至少有一個 VM 正在執行,才能產生指標。
- 作業的設定或權限不支援作業套件代理程式指標。 部分資源指標只能由作業套件代理程式提供。如要支援 Ops Agent 指標,工作必須符合 Ops Agent 的需求、安裝 Ops Agent,並使用可將指標寫入 Monitoring 的服務帳戶。
- 您需要使用其他方法或篩選器來查看指標。 如果 VM 遭到刪除,部分指標查看方法不會顯示 VM 的指標。此外,如果篩選器或顯示的時間範圍省略了指標,指標就不會顯示。此外,指標圖表的分辨率可調整,因此少量資料可能過於稀疏而無法顯示。
- 指標已刪除。指標刪除後就無法查看,而指標會在監控保留期限過後自動刪除。
解決方案
如果只有 Ops Agent 指標遺失,請先嘗試按照下列步驟解決問題:
- 請按照下列步驟驗證工作設定:
- 如要查看工作的完整設定資訊,請使用 gcloud CLI 或 Batch API 查看工作詳細資料。在後續步驟中使用輸出內容。
- 確認作業的服務帳戶具有寫入 Ops Agent 指標的權限。
- 確認作業符合所有「作業套件代理程式需求」。
- 確認作業正確安裝 Ops Agent。雖然可以在可執行的項目中手動安裝 Ops Agent,但建議的方法是設定
installOpsAgent
欄位為true
,自動安裝 Ops Agent。
- 如果問題仍未解決,請參閱 Google Cloud Observability 文件中的「排解 Ops Agent 問題」。
否則,請按照下列步驟解決問題:
- 請確認專案已啟用 Monitoring API:
- 確認作業的 VM 已開始執行,且執行時間仍在監控保留期限內。如要查看工作執行時間,請查看工作詳細資料。
- 請按照下列步驟操作,確認用來查看指標的方法沒有任何問題:
- 如果問題仍未解決,請參閱 Google Cloud Observability 說明文件中的「排解 Cloud Monitoring 問題」頁面。
VM 外部 IP 位址違反限制
問題
以下是失敗工作在 statusEvents
欄位中顯示的問題:
Instance VM_NAME creation failed: Constraint constraints/compute.vmExternalIpAccess violated for project PROJECT_NUMBER. Add instance VM_NAME to the constraint to use external IP with it.
發生這個問題的原因是專案、資料夾或機構已設定compute.vmExternalIpAccess
機構政策限制,因此只有允許清單中的 VM 才能使用外部 IP 位址。
解決方案
如要解決這個問題,請重新建立工作,並採取下列任一做法:
- 使用不受限制的專案。
- 建立工作,封鎖所有 VM 的外部存取權。
違反可信映像檔的限制
問題
以下是失敗工作在 statusEvents
欄位中顯示的問題:
Instance VM_NAME creation failed: Constraint constraints/compute.trustedImageProjects violated for project PROJECT_ID. Use of images from project batch-custom-image is prohibited.
解決方案
發生這個問題的原因是專案已設定受信任的映像檔 (compute.trustedImageProjects
) 政策限制,因此系統不允許使用 Batch 的映像檔 (位於 batch-custom-image
映像檔專案中)。
如要解決這個問題,請採取下列至少一項做法:
- 重新建立工作,指定 VM OS 映像檔,該映像檔已獲可信映像檔政策限制允許。
- 請管理員修改可信映像檔政策限制,允許使用
batch-custom-image
映像檔專案中的 VM OS 映像檔。如需操作說明,請參閱控管 Batch VM OS 映像檔的存取權。
使用執行個體範本時工作失敗
問題
如果使用執行個體範本的工作失敗,statusEvents
欄位會顯示下列問題:
INVALID_FIELD_VALUE,BACKEND_ERROR
發生這個問題的原因是工作執行個體範本有不明問題。
解決方案
如要進一步偵錯問題,請按照下列步驟操作:
工作失敗結束代碼
如果工作中的特定工作失敗,該工作會傳回非零的結束代碼。視您如何設定 ignoreExitStatus
欄位而定,工作可能會因任務失敗而失敗,也可能不會。
除了您在可執行檔中定義的任何結束代碼之外,Batch 還有多個保留的結束代碼,包括下列結束代碼。
VM 先占 (50001)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Spot Preemption with exit code 50001.
解決方案
如要解決這個問題,請採取下列任一做法:
- 使用自動重試工作或手動重新執行工作,即可重試工作。
- 如要確保 VM 不會遭到搶占,請改用標準佈建模式。
VM 報告逾時 (50002)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to Batch no longer receives VM updates with exit code 50002.
如果後端發生逾時,導致 Batch 無法再接收 VM 的工作更新,就會發生這個問題。很遺憾,許多硬體或軟體故障都可能導致 VM 無回應,例如 VM 可能會因暫時性主機事件或資源不足而當機。
解決方案
如要解決這個問題,請按照下列步驟操作:
- 如果問題是暫時性的,且會自行解決,請使用自動重試工作或手動重新執行工作,重試工作。
如果問題仍未解決,請執行下列一或多項操作,找出並解決導致 VM 沒有回應的原因:
建議:透過「Google Cloud 支援」或 Cloud 論壇上的「Batch」標籤取得支援。
請嘗試自行找出並解決問題。舉例來說,如果您熟悉 Compute Engine,可以嘗試透過下列方式排解作業 VM 的問題:
如要找出作業 VM 的名稱,請按照下列步驟操作:
- 查看工作記錄。
- 篩選記錄,找出含有「
report agent state:
」的項目。 查看記錄,判斷每個工作每次嘗試的 VM。每則記錄都類似於下列記錄,其中包含一個
instance:
片語和一或多個task_id:
片語。report agent state: ... instance:"INSTANCE_NAME" ... task_id:"task/JOB_UID-group0-TASK_INDEX/TASK_RETRIES/0 ..."
這份記錄包含下列值:
INSTANCE_NAME
:VM 的名稱。JOB_UID
:工作的專屬 ID (UID)。TASK_INDEX
:工作索引。TASK_RETRIES
:在這個 VM 上執行的工作嘗試次數,格式為重試次數。舉例來說,如果是首次嘗試執行工作,這個值為0
。 除非啟用自動重試工作,否則每項工作只會嘗試一次。
請參閱 Compute Engine 文件,排解作業 VM 的問題。例如,請參閱「排解 VM 關機和重新啟動的問題」和「解決 VM 啟動問題」。
執行期間重新啟動 VM (50003)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to VM is rebooted during task execution with exit code 50003.
如果工作執行期間,VM 意外重新啟動,就會發生這個問題。
解決方案
如要解決這個問題,請使用自動重試工作或手動重新執行工作,重試工作。
VM 和工作沒有回應 (50004)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to tasks cannot be canceled with exit code 50004.
如果工作達到無回應時間限制,且無法取消,就會發生這個問題。
解決方案
如要解決這個問題,請使用自動重試工作或手動重新執行工作,重試工作。
工作執行時間超過上限 (50005)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to task runs over the maximum runtime with exit code 50005.
這個問題會在下列情況發生:
- 工作執行時間超過
maxRunDuration
欄位中指定的時間限制 - 可執行的項目執行時間超過
timeout
欄位中指定的時間限制
如要找出具體超出哪個時間限制,請查看工作記錄,並找出提及 50005
結束代碼的記錄。這個記錄的 textPayload
欄位會指出時間限制的超出位置和時間。
解決方案
如要解決這個問題,請嘗試驗證超過時間限制的工作或可執行檔所需的總執行時間。接著,請進行下列其中一個步驟:
如果預期只會偶爾發生這項錯誤 (例如執行時間不一致的工作或可執行檔),可以嘗試重新建立工作,並設定自動重試工作,提高成功率。
否則,如果工作或可執行檔持續且刻意需要比目前逾時時間更長的時間才能完成執行,請設定更長的逾時時間。
執行期間重新建立 VM (50006)
問題
以下問題會顯示在工作資訊的statusEvents
欄位:
Task state is updated from PRE-STATE to FAILED on zones/ZONE/instances/INSTANCE_ID due to VM is recreated during task execution with exit code 50006.
如果工作在執行期間,VM 意外重新建立,就會發生這個問題。
解決方案
如要解決這個問題,請使用自動重試工作或手動重新執行工作,重試工作。