问题描述
几周前,即使流量接近零,我在App Engine上的应用程序也开始将闲置实例的数量增加到不合理的高水平。这当然会影响我的账单飞涨。
我的应用程序是简单的Node.js应用程序,提供了连接到我的Cloudsql数据库的GraphQL API。
为什么要启动所有这些空闲实例?
我的app.yaml:
runtime: nodejs12
service: default
handlers:
- url: /.*
script: auto
secure: always
redirect_http_response_code: 301
automatic_scaling:
max_idle_instances: 1
监视屏幕截图:
解决方法
这是非常奇怪的行为,根据documentation,它只能暂时超过max_idle_instances
。
注意:当负载峰值后恢复到正常水平时, 空闲实例的数量可以暂时超过您指定的数量 最大。但是,您支付的实例费用不会超过 您指定的最大数量。
一些可能的解决方案:
-
在控制台中确认实际的app.yaml配置与App Engine控制台中的配置相同。
-
(暂时)将
min_idle_instances
设置为1,将max_idle_instances
设置为2,然后重新部署应用程序。在扩展方面可能出了点问题,重新部署应用程序可以解决此问题。 -
请检查您的日志记录(过滤器应用程序引擎),以关闭空闲实例是否存在任何问题。
-
最后,您可以调整诸如
max_pending_latency
之类的设置。我见过人们构建应用程序需要2-3秒才能启动,而默认时间是30ms,然后才能启动另一个实例。 -
此post建议设置以下内容,您可以尝试以下方法:
instance_class: F1 automatic_scaling: max_idle_instances: 1 # default value min_pending_latency: automatic # default value max_pending_latency: 30ms
-
切换到
basic_scaling
,让Google确定最佳缩放算法(最后选择)。看起来像这样:basic_scaling: max_instances: 5 idle_timeout: 15m
解决方案当然也可以是2和4的组合。
,24小时后更新:
我遵循@Nebulastic建议2和4,但没有任何区别。因此,我无奈地禁用了整个Google App Engine(App Engine>设置>禁用应用程序)并将其关闭了10分钟,并在监控仪表板中确认一切都消失了(抱歉,用户!)。
10分钟后,我再次启用了App Engine,它仅启动了1个实例。从那以后我一直在密切监视它,现在看起来(终于)很好。现在,重新启动后,它还遵循“最小”和“最大”空闲实例配置-@Nebulastic的建议。谢谢!
屏幕截图:
,您是否检查过以确保没有一堆旧版本还在运行? https://console.cloud.google.com/appengine/versions
在“服务”下拉列表中检查每个服务