本頁說明如何解決 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 服務範圍中為工作設定網路,請參閱「在批次中使用 VPC Service Controls」。
工作問題和失敗錯誤
如果工作無法正常執行或因不明原因而失敗,可能是因為本節的其中一個錯誤,或是下文「工作失敗的結束碼」一節中的其中一個結束碼。
Cloud Logging 中沒有任何記錄檔
問題
您需要對工作進行偵錯,但 Cloud Logging 中沒有顯示該工作的記錄。
這個問題通常是因為以下原因造成:
- 您的專案未啟用 Cloud Logging API。即使您已正確設定工作記錄的所有其他設定,如果專案未啟用服務,系統也不會產生記錄。
- 工作服務帳戶沒有寫入記錄的權限。權限不足,工作無法產生記錄。
- 工作未設定為產生記錄。如要在 Cloud Logging 中產生記錄,工作必須啟用 Cloud Logging。工作可執行項目也應設定為將您希望記錄中顯示的任何資訊寫入標準輸出 (stdout) 和標準錯誤 (stderr) 串流。詳情請參閱「使用記錄分析工作」。
- 任務未執行。工作必須先指派資源並開始執行,系統才能產生記錄檔。
- Cloud Logging 已設定為自動排除工作記錄。如果您已設定Cloud Logging 排除篩選器,導致批次作業的記錄遭到排除,則無法顯示批次作業的記錄。
解決方案
如要解決這個問題,請按照下列步驟操作:
- 請停用任何目前的 Cloud Logging 排除篩選器,確保系統不會自動將記錄檔從 Cloud Logging 中排除。
- 請確認專案已啟用 Cloud Logging API。
- 請確認工作所屬服務帳戶具備記錄寫入者 (
roles/logging.logWriter
) IAM 角色。詳情請參閱「為專案啟用批次功能」。 - 使用 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 都沒有回報給 批次服務代理程式。
這個問題通常是因為以下原因造成:
- 工作 VM 的權限不足。工作 VM 需要特定權限,才能向批次服務代理程式回報狀態。您可以將「批次代理程式報表員」角色 (
roles/batch.agentReporter
) 授予工作服務帳戶,為工作 VM 提供這些權限。 - 工作 VM 發生網路問題。工作 VM 需要網路存取權,才能與 Batch 服務代理程式通訊。
- 工作 VM 使用的是過時的 Batch VM 作業系統映像檔,或是使用的是含有過時 Batch 服務代理程式軟體的 VM 作業系統映像檔。工作 VM 的 VM OS 映像檔必須包含軟體,提供目前的依附元件,以便回報給批次作業服務代理程式。
解決方案
如要解決這個問題,請按照下列步驟操作:
請確認工作 VM 具備向 Batch 服務代理回報狀態所需的權限。
- 如要識別工作中的服務帳戶,請使用 gcloud CLI 或 Batch API 查看工作詳細資料。如果未列出任何服務帳戶,工作會預設使用 Compute Engine 預設服務帳戶。
確認工作服務帳戶具有「批次代理人報表」角色 (
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 是工作所使用的批次作業 VM OS 映像檔的特定版本,例如
batch-debian-11-20220909-00-p00
。
您可以使用較新的 VM OS 映像檔解決這個問題。如果工作使用自訂映像檔,請根據支援的公開映像檔最新版本重新建立自訂映像檔。
詳情請參閱「支援的 VM 作業系統映像檔」和「查看 VM 作業系統映像檔」。
重新建立工作。
Cloud Monitoring 中缺少資源指標
問題
您想查看工作資源指標,但部分或所有預期的指標都缺少。
這個問題通常是因為以下原因造成:
- 專案未啟用 API。即使您已正確設定專案中的所有其他項目,資源指標可能會在啟用 Cloud Monitoring API 後才會顯示。對於 Ops Agent,您也必須啟用 Cloud Logging API。
- 您的權限不足,無法查看指標。您必須具備足夠的權限,才能查看指標。
- 工作 VM 未執行。至少有一項工作 VM 正在執行,才能產生工作指標。
- 工作設定或權限不支援 Ops Agent 指標。部分資源指標只能由作業套件代理程式提供。如要支援 Ops Agent 指標,工作必須符合 Ops Agent 的相關規定、安裝 Ops Agent,並使用可將指標寫入 Monitoring 的服務帳戶。
- 您必須使用其他方法或篩選器才能查看指標。某些查看指標的方法不會在刪除 VM 後顯示 VM 的指標。此外,如果指標遭到篩選器或顯示時間範圍略過,就不會顯示。此外,指標圖表具有可調整的解析度,這可能導致少量資料太稀疏而無法顯示。
- 已刪除指標。指標刪除後便無法查看,系統會在監控保留期間過後自動刪除。
解決方案
如果只有 Ops Agent 指標遺失,請先嘗試執行下列操作來解決問題:
- 如要驗證工作設定,請執行下列操作:
- 如要查看工作完整的設定資訊,請使用 gcloud CLI 或 Batch API 查看工作詳細資料。將輸出內容用於其餘步驟。
- 請確認工作服務帳戶具備寫入 Ops Agent 指標的權限。
- 請確認工作符合所有 Ops Agent 需求。
- 確認工作正確安裝 Ops Agent。雖然可以在可執行項目中手動安裝 Ops Agent,但建議您將
installOpsAgent
欄位設為true
,以便自動安裝 Ops Agent。
- 如果問題仍未解決,請參閱 Google Cloud 觀測功能說明文件中的「排解 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-custom-image
圖片專案中的批次圖片。
如要解決問題,請至少執行下列任一操作:
- 重新建立工作,指定可信映像檔政策限制已允許的 VM OS 映像檔。
- 請管理員修改可信映像檔政策限制,允許來自
batch-custom-image
映像檔專案的 VM 作業系統映像檔。如需操作說明,請參閱「控管 Batch 的 VM 作業系統映像檔存取權」。
使用執行個體範本時,工作失敗
問題
對於使用執行個體範本的失敗工作,statusEvents
欄位會顯示下列問題:
INVALID_FIELD_VALUE,BACKEND_ERROR
這個問題是由於工作執行個體範本發生不明問題。
解決方案
如要進一步偵錯問題,請按照下列步驟操作:
工作失敗結束代碼
當工作中的特定工作失敗時,該工作會傳回非零結束代碼。視您設定 ignoreExitStatus
欄位的方式而定,失敗的任務可能會或不會導致工作失敗。
除了您在可執行項目中定義的任何結束碼之外,批次作業也有幾個保留的結束碼,包括下列結束碼。
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.
當工作所需的 Spot VM 在執行期間遭到先占時,就會發生這個問題。
解決方案
如要解決這個問題,請按照下列任一做法進行:
- 使用自動重試工作或手動重新執行工作,重試工作。
- 為確保不會發生先占用行為,請改用採用標準佈建模式的 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 Support 或 Cloud 論壇的批次標籤取得支援。
請自行找出並解決問題。舉例來說,如果您熟悉 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 時,就會發生這個問題。
解決方案
如要解決這個問題,請使用自動重試工作或手動重新執行工作,重新嘗試工作。