0

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

日志显示不断重生:

Log showing constant respawning.

的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 
+0

如果您向任何一个实例的url'/ _ah/health'发送获取请求,会发生什么? –

+0

我从我的健康检查终端处得到200'ok'。 –

+0

这可能是平台的问题。我们应该首先排除这种情况实际上是不健康的。 Respawns通常是由失败或无响应的健康检查引起的。根据你的设置,一个实例只需要在20秒内没有响应(2次健康检定)就可能导致重生(3级是安全的)。你的健康检查日志'/ _ah/health'是否显示超过30秒的任何故障或响应?这个重生问题的时间表是什么? CPU和内存使用情况与应用程序实例类似? Hello World **去** flex应用程序这样做吗? – Nicholas

回答

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 
} 

的情况下,现在根据我的自动缩放设置的行为!重生不见了。

我明显应该仔细阅读文档,但健康检查日志中没有显示任何问题。所有健康检查看起来像他们正在通过。希望这个信息对别人有帮助。