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 
} 

的情況下,現在根據我的自動縮放設置的行爲!重生不見了。

我明顯應該仔細閱讀文檔,但健康檢查日誌中沒有顯示任何問題。所有健康檢查看起來像他們正在通過。希望這個信息對別人有幫助。