配置内存限制

了解如何在 Knative serving 中为容器实例使用的内存设置限制。

了解内存用量

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

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

  • 运行应用可执行文件(当可执行文件必须加载到内存中时)
  • 在应用进程中分配内存
  • 将文件写入文件系统

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

最大内存量

您可以配置的最大内存量受 GKE 集群配置的限制。

优化内存

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

由此可见:

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

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

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

设置和更新内存限制

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

您可以在部署新服务或更新现有服务并部署修订版本时使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 文件来设置内存限制:

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 在“高级设置”下,点击容器

  4. 分配的内存下拉列表中选择所需的内存大小。

  5. 点击下一步以转到下一部分。

  6. 配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。

  7. 点击创建以将映像部署到 Knative serving,然后等待部署完成。

命令行

  • 对于现有服务,请运行带有 --memory 参数的 gcloud run services update 命令来更新内存限制:

    gcloud run services update SERVICE --memory SIZE

    您需要进行如下替换:

    • SERVICE 替换为您的服务名称。
    • SIZE 替换为所需的内存大小。 内存大小可以表示为定点数或浮点数后接 GMK 单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即 GiMiKi,这些单位分别代表吉比字节、兆比字节、千字节)。
  • 对于新的服务,您可以通过运行带有 --memory 参数的 gcloud run deploy 命令来设置 GPU 限制:

    gcloud run deploy SERVICE --image=IMAGE_URL --memory SIZE

    您需要进行如下替换:

    • SERVICE 替换为您的服务名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/cloudrun/hello
    • SIZE 替换为所需的内存大小。 内存大小可以表示为定点数或浮点数后接 GMK 单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即 GiMiKi,这些单位分别代表吉比字节、兆比字节、千字节)。

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  2. 在本地文件中,更新 memory 属性:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE_NAME
    spec:
      template:
        spec:
          containers:
    image: IMAGE_URL
            resources:
              limits:
                memory: SIZE

    SIZE 替换为所需的内存大小。可以表示为定点数或浮点数后接 GMK 单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即 GiMiKi,这些单位分别代表吉比字节、兆比字节、千字节)。

  3. 使用以下命令将服务的配置替换为新配置:

    gcloud run services replace service.yaml