问题排查

本页面介绍了如何解决 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_USAGE) 和限额 (QUOTA_LIMIT) (共 QUOTA_NAME 个配额)阻止了作业的 请求的用量 (WANT_QUOTA)。

  • 当作业在 QUEUEDSCHEDULEDFAILED 状态, 以下某个问题出现在 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 权限

解决方案

如需解决此问题,请执行以下操作:

  1. 如果作业使用实例模板,请验证服务账号 与服务账号匹配 。
  2. 确保已授予创建作业的用户 Service Account User 角色 (roles/iam.serviceAccountUser) 为作业指定的服务账号上。如需了解详情,请参阅 管理访问权限
  3. 重新创建作业。

重复的网络

问题

尝试创建作业时会出现以下问题:

Networks must be distinct for NICs in the same InstanceTemplate

出现此问题是因为您为作业指定了多次的网络。

解决方案

如需解决此问题,请重新创建作业,并使用 以下选项之一

如需了解详情,请参阅 为作业指定网络

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 地址的应用。

如需解决此问题,请执行以下操作: 创建一个阻止所有虚拟机从外部访问的作业

如需详细了解如何为 Cloud Storage 中的作业配置网络, VPC Service Controls 服务边界 请参阅将 VPC Service Controls 与 Batch 搭配使用

作业问题和失败错误

如果某项作业未正确运行或运行失败, 原因不明,可能是由于本部分中的某个错误 或以下代码中的一个退出代码 任务失败退出代码部分。

Cloud Logging 中没有日志

问题

您需要调试作业,但系统未显示此作业的日志 Cloud Logging。

出现此问题通常是由于以下原因:

  • 您的项目未启用 Cloud Logging API。 即使您为作业日志正确配置了所有其他内容, 如果未启用该服务,则不会生成日志 自己的项目
  • 该作业的服务账号没有写入权限 日志。如果作业没有相应权限,则无法生成日志。
  • 作业未配置为生成日志。要在 Cloud Logging,则作业需要启用 Cloud Logging。作业的 还应配置 Runnable,以写入您希望 出现在日志中的标准输出 (stdout) 和 标准错误 (stderr) 流。如需了解详情,请参阅 使用日志分析作业
  • Tasks 未运行。完成任务后才能生成日志 然后就可以开始运行了
  • Cloud Logging 已配置为自动排除作业的日志。 如果您已经配置了 Batch 作业,则无法显示来自 Batch 作业的日志 Cloud Logging 的排除项过滤器 导致 Batch 作业的日志被排除在外。

解决方案

如需解决此问题,请执行以下操作:

  1. 确保日志未自动从 Cloud Logging 中排除 来停用 Cloud Logging 的排除项过滤器
  2. 确保您的项目已启用 Cloud Logging API
  3. 确保作业的服务账号 Logs Writer (roles/logging.logWriter) IAM 角色。 如需了解详情,请参阅 为项目启用 Batch
  4. 使用 gcloud CLI 或 Batch API 查看作业详情。 该作业详情可帮助您了解未得到该作业的原因 生成日志,并可能会提供您希望 从日志中获取。例如,执行以下操作: <ph type="x-smartling-placeholder">
      </ph>
    1. 要验证日志记录是否已启用,请查看作业的 logsPolicy 字段
    2. 如需验证作业是否已成功运行,请查看作业的 status 字段

进行任何更改后,重新创建作业并等待作业完成 在检查日志之前完成运行。

没有服务代理报告

问题

以下问题出现在 statusEvents 字段 创建虚拟机之前,对于未正常运行或失败的作业:

No VM has agent reporting correctly within time window NUMBER_OF_SECONDS seconds, VM state for instance VM_NAME is TIMESTAMP,agent,start

该问题表明作业的所有虚拟机均未向 批处理服务代理

出现此问题通常是由于以下原因:

  • 该作业的虚拟机权限不足。 作业的虚拟机需要特定权限才能将其状态报告给 批处理服务代理。你可以提供这些权限 授予作业虚拟机的 Batch Agent Reporter 角色 (roles/batch.agentReporter) 该作业的服务账号
  • 此作业的虚拟机存在网络问题。一个作业的虚拟机需要网络 拥有与 Batch 服务代理通信的权限。
  • 该作业的虚拟机使用的是已过时的 Batch 虚拟机操作系统映像或使用虚拟机操作系统映像 使用过时的 Batch 服务代理软件。 作业的虚拟机需要其虚拟机操作系统映像中的软件, 当前依赖项,以便向 批处理服务代理。

解决方案

如需解决此问题,请执行以下操作:

  1. 验证作业的虚拟机是否具有报告其状态所需的权限 Batch 服务代理。

    1. 要确定作业的服务账号 使用 gcloud CLI 或 Batch API 查看作业详情。 如果未列出任何服务账号,该作业将使用 Compute Engine 默认服务账号
    2. 确认该作业的服务账号 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
      
  2. 验证作业的虚拟机是否具有适当的网络访问权限。 如需了解详情,请参阅 批量网络概览排查常见的网络问题

  3. 如果您为作业指定了虚拟机操作系统映像,请验证 目前支持虚拟机操作系统映像。

    1. 如果您为作业启用了 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 是用于 批处理服务代理 例如 cloud-batch-agent_20221103.00_p00

      • 过期的 Batch 虚拟机操作系统映像错误日志:

        rpc error: code = FailedPrecondition, desc = Invalid resource state for BATCH_VM_OS_IMAGE_NAME: outdated Batch image version.
        

        BATCH_VM_OS_IMAGE_NAME 是 作业使用的 Batch 中的虚拟机操作系统映像,例如 batch-debian-11-20220909-00-p00

    2. 您可以使用较新的虚拟机操作系统映像来解决此问题。 如果作业使用自定义映像,请基于该映像重新创建该自定义映像 受支持公共映像的最新版本。

      如需了解详情,请参阅支持的虚拟机操作系统映像查看虚拟机操作系统映像

  4. 重新创建作业。

Cloud Monitoring 中缺少资源指标

问题

您希望 查看作业的资源指标, 但缺少部分或全部预期指标

出现此问题通常是由于以下原因:

  • 您的项目未启用该 API。 即使您正确配置了项目中的其他所有项目 指标可能不会显示。 对于 Ops Agent,您还必须启用 Cloud Logging API。
  • 您的权限不足,无法查看这些指标。禁止的行为 在权限不足的情况下查看指标。
  • 此作业的虚拟机未运行。无法为作业生成指标 直到至少有一个作业的虚拟机运行为止。
  • 作业的配置或权限不支持 Ops Agent 指标。 某些资源指标只能由 Ops Agent 提供。为 Ops Agent 提供支持 代理指标,作业必须符合 Ops Agent 的要求,安装 Ops Agent,并使用可写入指标的服务账号, 监控。
  • 您需要使用其他方法或过滤条件才能查看指标。 某些查看指标的方法不会在虚拟机之后显示虚拟机的指标 将被删除。此外,如果指标被过滤器忽略,系统将不会显示这些指标 或显示的时间段此外,指标图表还包含 可能会导致少量数据过薄,无法显示的分辨率。
  • 指标已删除。指标删除后便无法查看 监控保留期结束后, 。

解决方案

如果只有 Ops Agent 指标缺失,请先尝试解决问题,方法是 以下:

  1. 通过执行以下操作来验证作业的配置: <ph type="x-smartling-placeholder">
      </ph>
    1. 如需查看作业的完整配置信息,请执行以下操作: 使用 gcloud CLI 或 Batch API 查看作业详情。使用输出 完成其余步骤
    2. 确保该作业的服务账号具有 写入 Ops Agent 指标的权限
    3. 确保作业满足所有 Ops Agent 要求
    4. 确保该作业正确安装 Ops Agent。虽然 可以在可运行对象中手动安装 Ops Agent, 推荐方法是通过以下方式自动安装 Ops Agent: 设置 installOpsAgent 字段 发送至 true
  2. 如果问题仍然存在,请参阅 排查 Ops Agent 问题

否则,请执行以下操作来解决此问题:

  1. 确保您的项目已启用 Monitoring API:

    启用 API

  2. 确保作业的虚拟机已开始运行,并且运行时间仍然是 内 监控保留期限。 您可以通过以下方式查看作业的运行时间 查看作业详情
  3. 验证您用于查看的方法没有任何问题 执行以下操作: <ph type="x-smartling-placeholder">
      </ph>
    1. 除非您只想查看正在运行的资源的指标,否则请确保 使用 Metrics Explorer 或自定义 由 Metrics Explorer 图表创建的信息中心。其他方法,例如 不显示资源指标 应用。
    2. 请确保 展示期 包括作业的运行时间对于图表,还要确保 图表分辨率 适合您的数据。
    3. 确保 过滤条件 隐藏了数据的过滤器。
  4. 如果问题仍然存在,请查看 排查 Cloud Monitoring 问题 请参阅 Google Cloud Observability 文档。

违反了虚拟机外部 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 组织政策限制条件 以便只有列入许可名单的虚拟机才能使用外部 IP 地址。

解决方案

如需解决此问题,请重新创建作业,并执行以下一项操作:

违反了针对可信映像的限制条件

问题

以下问题出现在 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 映像项目,不允许使用。

如需解决此问题,请至少执行下列其中一项操作:

使用实例模板时,作业失败

问题

以下问题出现在 statusEvents 字段 为使用实例模板的失败作业:

INVALID_FIELD_VALUE,BACKEND_ERROR

出现此问题是由于作业的实例模板出现不明确的问题。

解决方案

如需进一步调试问题,请执行以下操作:

  1. 使用实例模板创建 MIG 并观察是否发生错误,并提供更多详情。
  2. 可选:如需尝试查找更多信息,请参阅 长时间运行的操作 在 Google Cloud 控制台中创建 MIG 的账号。

    转到 Compute Engine 操作

任务失败退出代码

当作业中的某个特定任务失败时,该任务会返回一个非零值 退出代码。 根据您配置 ignoreExitStatus 字段、 失败的���务不一定会导致作业失败。

除了您在可运行对象中定义的任何退出代码外, 该批次有多个预留退出代码,包括 以下退出代码。

虚拟机抢占 (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 虚拟机时,就会出现此问题 在运行期间被抢占

解决方案

如需解决此问题,请执行以下操作之一:

  • 使用 任务自动重试 或手动重新运行作业。
  • 为保证不发生抢占,请使用 标准预配模型

虚拟机报告超时 (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.

如果后端中的超时导致 让作业不再接收更新的虚拟机。

解决方案

要解决此问题,请使用 任务自动重试 或手动重新运行作业。

虚拟机在执行期间重新启动 (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.

如果作业的虚拟机在运行时意外重新启动,就会出现此问题。

解决方案

要解决此问题,请使用 任务自动重试 或手动重新运行作业。

虚拟机和任务无响应 (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.

此问题会在以下情况下出现:

为了明确确定超出了哪个时间限制 查看作业的日志 并找到提及 50005 退出代码的日志。此 textPayload 字段 会指明超出时间限制的位置和时间。

解决方案

要解决此问题,请尝试验证 超出时间限制的任务或可运行状态。 然后,执行以下操作之一:

  • 如果您只是偶尔遇到此错误,例如由于任务或可运行 运行时间不一致,您可以尝试重新创建作业, 自动执行任务重试 来尝试提高成功率

  • 否则,如果任务或 完成运行所需的时间超过了当前超时允许的时间, 延长超时时间

执行期间重新创建的虚拟机 (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.

如果作业的虚拟机在运行时意外重新创建,就会出现此问题。

解决方案

要解决此问题,请使用 任务自动重试 或手动重新运行作业。

后续步骤