配置内存限制

您可以为 Cloud Run 服务预配不同的内存量。本页介绍了如何指定可供服务使用的内存量。

了解内存用量

如果 Cloud Run 实例超出其允许的内存限制,则该应用会被终止。

以下各项会计入实例的可用内存:

  • 运行服务可执行文件,因为可执行文件必须加载到内存中
  • 在服务进程中分配内存
  • 将文件写入文件系统

部署的容器映像的大小不会计入可用内存。

设置和更新内存限制

您可以为 Cloud Run 服务设置内存限制。默认情况下,系统会为修订版本的每个实例分配 512 MiB 内存,并为函数分配 256 MiB 内存。

要求的最小 CPU 数

您选择的分配内存量对应于为您的服务分配的 CPU 量。设置内存限制时,需要满足以下最小 CPU 数限制:

内存 所需的最少 CPU 数
128 MiB 0.083 个 vCPU
256 MiB 0.167 个 vCPU
512 MiB 0.333 个 vCPU
1 GiB 0.583 个 vCPU
2 GiB 1 个 vCPU
超过 4 GiB 2 个 vCPU
超过 8 GiB 4 个 vCPU
超过 16 GiB 6 个 vCPU
超过 24 GiB 8 个 vCPU
如果您使用的内存少于 512 MiB,则应使用第一代执行环境

最大内存量

您最多可以配置 32 吉比字节 (32 Gi) 内存。

您可以使用自定义组织政策强制执行内存用量上限。

最小内存

最小内存设置取决于您使用第一代还是第二代执行环境:

  • 128 MiB(第一代)
  • 512 MiB(第二代)

所需的角色

如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 服务与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

配置内存限制

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

对于 Cloud Run 服务,您可以在创建新服务部署新的修订版本时使用 Google Cloud 控制台、gcloud 命令行或 YAML 文件来设置内存限制:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击容器标签页。

    图片

    • 内存下拉列表中选择所需的内存大小。
  5. 点击创建部署

gcloud

您可以使用以下命令更新给定服务的内存分配

gcloud run services update SERVICE --memory SIZE

SERVICE 替换为您的服务名称,并将 SIZE 替换为所需的内存大小。内存大小的格式为定点数或浮点数,后接单位GM(分别表示千兆字节或兆字节),也可以使用等效的 2 的幂次方数,后接单位 GiMi(分别表示吉比字节或兆比字节)。

您还可以在部署期间使用以下命令设置内存限制:

gcloud run deploy --image IMAGE_URL --memory SIZE

您需要进行如下替换:

  • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • SIZE 替换为适当值(见上文)。

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 memory 特性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE
            resources:
              limits:
                memory: SIZE

    您需要进行如下替换

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • SIZE 替换为所需的内存大小。格式为定点数或浮点数,后接单位 GM(分别表示千兆字节或兆字节),也可以使用 2 的幂次方数,后接单位 GiMi(分布表示吉比字节或兆比字节分)。
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

将以下内容添加到 Terraform 配置中的 template.containers.resources.limits 下的 google_cloud_run_v2_service 资源中。将 512Mi 替换为服务所需的内存限制。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-memory-limits"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      resources {
        limits = {
          # Memory usage limit (per container)
          memory = "512Mi"
        }
      }
    }
  }
}

优化服务的内存

对于 Cloud Run 服务,您可以通过以下方式确定服务所需的最高内存:(常规内存)+(每个请求所需的内存)*(服务并发请求数)

由此可见:

  • 如果提高服务的并发请求数,则还应增加内存限制,以应对使用高峰。

  • 如果降低服务的并发请求数,则应考虑减小内存限制,以节省内存使用费用。

如需详细了解如何最大限度地降低每个请求的内存用量,请参阅关于全局变量的开发提示

查看内存限制设置

如需查看 Cloud Run 服务的当前内存限制设置,请按照以下所述操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,“容器”标签页下列出了内存限制设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到内存限制设置。