【发布时间】:2016-12-30 23:47:02
【问题描述】:
我正在使用 AppEngine flexible 部署一个 Go 应用程序。下面是我的 app.yaml。有时在我部署后它会稳定在 1 个实例(这是一个负载非常低的应用程序),但大多数时候它会不断重生超过 6 个实例。我的日志充满了显示正在创建的新实例的消息。此应用程序的负载几乎为零,为什么 AppEngine 灵活地不断销毁和重新生成实例?
显示不断重生的日志:
app.yaml
runtime: go
api_version: go1
env: flex
handlers:
- url: /.*
script: _go_app
health_check:
enable_health_check: True
check_interval_sec: 10
timeout_sec: 4
unhealthy_threshold: 2
healthy_threshold: 2
automatic_scaling:
min_num_instances: 1
max_num_instances: 10
cool_down_period_sec: 120 # default value
cpu_utilization:
target_utilization: 0.5
【问题讨论】:
-
如果您向任何一个实例的 url '/_ah/health' 发送 get 请求会发生什么?
-
我的健康检查端点返回了 200 'ok'。
-
这可能是平台的问题。我们应该首先排除实例实际上是不健康的。重生通常是由失败或无响应的健康检查引起的。根据您的设置,一个实例只需 20 秒无响应(2 次运行状况检查)就可能导致重生(3 秒是安全的)。您的健康检查日志
/_ah/health是否显示间隔超过 30 秒的任何故障或响应?这个重生问题的时间表是什么?您的应用程序实例的 CPU 和内存使用情况如何? Hello World go flex 应用程序会这样做吗? -
nginx.health_check 日志显示没有失败的健康检查。这通常发生在新部署之后,但几个小时后就会停止。几个小时内不断有实例重生,然后最终稳定在 2 个实例。我还没有使用 Hello World golang flex 应用程序进行测试。
-
我尝试了 timeout_sec、unhealthy_threshold 和 cool_down_period_sec 变量的各种设置,结果都一样。重要的实例重生了几个小时,然后最终稳定下来。
标签: google-app-engine google-cloud-platform google-managed-vm app-engine-flexible