0

我正在使用灵活的 AppEngine 部署 Go 应用程序。下面是我的 app.yaml。有时在我部署后它会稳定在 1 个实例(这是一个负载非常低的应用程序),但大多数时候它会不断地重新生成超过 6 个实例。我的日志充满了显示正在创建的新实例的消息。这个应用程序的负载几乎为零,为什么 AppEngine 灵活地不断销毁和重生实例?

显示不断重生的日志:

显示不断重生的日志。

应用程序.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
4

1 回答 1

1

问题出在我的健康检查功能上。它最初看起来像这样:

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

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

您可以编写自己的自定义健康检查代码。它应该使用 HTTP 状态代码 200 回复 /_ah/health 请求。响应必须包含消息正文,但是,正文的值被忽略(可以为空)。

于是我改了健康检查功能,写了一个简单的“ok”作为响应:

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

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

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

于 2017-01-14T23:03:09.427 回答