AppEngine 灵活实例不断重生

AppEngine Flexible instances constantly respawning

我正在使用 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

问题出在我的健康检查功能上。原来是这样的:

func healthCheckHandler(w http.ResponseWriter, r *http.Request) {
    return
}

然后我在关于如何管理实例的文档中发现了这句话:

You can write your own custom health-checking code. It should reply to /_ah/health requests with a HTTP status code 200. The response must include a message body, however, the value of the body is ignored (it can be empty).

所以我改健康检查功能写了一个简单的"ok"响应:

func healthCheckHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("ok"))
    return
}

实例现在根据我的自动缩放设置运行!重生消失了。

我显然应该更仔细地阅读文档,但健康检查日志中的问题指示为零。所有健康检查看起来都通过了。希望此信息对其他人有所帮助。