我正在使用AppEngine灵活部署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
答案 0 :(得分: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
}
现在,实例的行为符合我的自动缩放设置!重生已经消失。
我显然应该更接近阅读文档,但健康检查日志中没有任何问题。所有健康检查看起来都像是在经过。希望这些信息对其他人有用。