了解如何在 Knative serving 中为容器实例使用的内存设置限制。
了解内存用量
如果 Knative serving 容器实例超出其允许的内存限制,则该应用会被终止。
以下各项会计入容器实例的可用内存:
- 运行应用可执行文件(当可执行文件必须加载到内存中时)
- 在应用进程中分配内存
- 将文件写入文件系统
部署的容器映像的大小不会计入可用内存。
最大内存量
您可以配置的最大内存量受 GKE 集群配置的限制。
优化内存
您可以通过以下方式确定服务所需的最高内存:(常规内存) + (每项请求所需的内存) * (服务并发请求数)
由此可见:
如果提高服务的并发请求数,则还应增加内存限制,以应对使用高峰。
如果降低服务的并发请求数,则应考虑减小内存限制,以节省内存使用费用。
如需详细了解如何最大限度地降低每个请求的内存用量,请参阅关于全局变量的开发提示。
设置和更新内存限制
任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。
您可以在部署新服务或更新现有服务并部署修订版本时使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 文件来设置内存限制:
控制台
在 Google Cloud 控制台中前往 Knative serving:
如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本。
在“高级设置”下,点击容器。
从分配的内存下拉列表中选择所需的内存大小。
点击下一步以转到下一部分。
在配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。
点击创建以将映像部署到 Knative serving,然后等待部署完成。
命令行
对于现有服务,请运行带有
--memory
参数的gcloud run services update
命令来更新内存限制:gcloud run services update SERVICE --memory SIZE
您需要将其中的:
- 将 SERVICE 替换为您的服务名称。
- 将 SIZE 替换为所需的内存大小。 内存大小可以表示为定点数或浮点数后接
G
、M
或K
单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即Gi
、Mi
或Ki
,这些单位分别代表吉比字节、兆比字节、千字节)。
对于新的服务,您可以通过运行带有
--memory
参数的gcloud run deploy
命令来设置 GPU 限制:gcloud run deploy SERVICE --image=IMAGE_URL --memory SIZE
您需要将其中的:
- 将 SERVICE 替换为您的服务名称。
- 将 IMAGE_URL 替换为对容器映像的引用,例如
gcr.io/cloudrun/hello
。 - 将 SIZE 替换为所需的内存大小。 内存大小可以表示为定点数或浮点数后接
G
、M
或K
单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即Gi
、Mi
或Ki
,这些单位分别代表吉比字节、兆比字节、千字节)。
YAML
您可以使用 gcloud run services describe
命令和 --format=export
标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace
命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。
将服务配置下载到本地工作区上名为
service.yaml
的文件中:gcloud run services describe SERVICE --format export > service.yaml
将 SERVICE 替换为您的 Knative serving 服务的名称。
在本地文件中,更新
memory
属性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME spec: template: spec: containers: – image: IMAGE_URL resources: limits: memory: SIZE
将 SIZE 替换为所需的内存大小。可以表示为定点数或浮点数后接
G
、M
或K
单位的形式(这些单位分别代表千兆字节、兆字节、千字节),也可以表示为等效的 2 的幂次方数(即Gi
、Mi
或Ki
,这些单位分别代表吉比字节、兆比字节、千字节)。使用以下命令将服务替换为其新配置:
gcloud run services replace service.yaml