GAE 灵活环境允许您指定容器所需的资源。例如:
resources:
cpu: 0.5
memory_gb: 1.3
disk_size_gb: 10
这将为g1-small
实例分配 1.7GB 内存。但是,如果我将 提高memory_gb
到1.5
,GAE 现在将为n1-standard-1
实例分配 3.75GB 内存。
为什么调度程序似乎分配了超过 10% 的内存?这是否意味着我运行的容器实际上g1-small
无法安全地使用实例拥有的全部 1.7GB 内存?
(潜在的问题是:给定一个实例的内存大小,并在 GAE 灵活环境下运行,我应该设置什么node
来--max-old-space-size
确保我的进程不会崩溃?但给出上述问题的答案,我大概可以解决这个问题。)
答案1
从昨天开始,App Engine 灵活环境的新 Beta 版本已部署,不再在创建容器实例时指定机器类型。如本资源设置中所述关联,应用引擎负责分配具有足够资源的实例,以至少保证您的应用具有指定的 CPU 和内存量。因此,您为变量指定的内存量memory_gb
将是您的容器可用的内存量。
或者,在配置您的 App Engine 应用程序并将其部署到云端后,您可以执行以下步骤来检索应用程序可用的内存量:
运行命令:
gcloud compute instances describe NAME [--zone=ZONE]
定位
key: gae_app_container_memory_mb
下面的值
gae_app_container_memory_mb
代表您的容器可用的保证最小内存量(以 MB 为单位)。(请参阅此关联了解更多信息)
关于您之前的观察,观察到的行为与运行应用程序环境所需的实例开销有关,因此作为预防措施,恰好需要比请求的更多的内存(即设置更强大的 GCE 实例类型)。
最后需要注意的是,App Engine 灵活环境的 Beta 版不受任何 SLA 或弃用政策的约束,并且实现方式可能会发生变化,可能以向后不兼容的方式发生变化。因此,不建议将其用于生产。