0

AppEngine flexible을 사용하여 Go 애플리케이션을 배포하고 있습니다. 아래는 내 app.yaml입니다. 때로는 배포 한 후 1 인스턴스 (매우 낮은로드 응용 프로그램)에서 안정화되지만 대부분의 경우 6 인스턴스 이상 지속적으로 respawns. 내 로그에는 새 인스턴스가 생성되었음을 나타내는 메시지가 채워져 있습니다. 이 애플리케이션에는 거의 제로로드가 있습니다. 왜 AppEngine은 유연한 인스턴스를 끊임없이 파괴하고 인스턴스를 다시 생성합니까? 일정 respawning을 보여주는AppEngine 유연한 인스턴스가 지속적으로 재 활성화

로그 :

Log showing constant respawning.

애플리케이션 제목을

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'에 대한 get 요청을 보내면 어떻게됩니까? –

+0

건강 검진 종점에서 200 '확인'을 받았습니다. –

+0

플랫폼에 문제가있을 수 있습니다. 우선 인스턴스가 실제로 건강에 좋지 않다는 것을 배제해야합니다. Respawns는 대부분 건강에 문제가 있거나 응답이없는 경우에 발생합니다. 설정에 따라 인스턴스가 응답하지 않는 경우 20 초 (2 건강 검진) 만 있으면 잠재적으로 respawn (3이 안전)이 될 수 있습니다. 건강 검진 기록'/ _ah/health'는 30 초 이상 떨어진 모든 실패 또는 반응을 보여 줍니까? 이 부활 문제의 타임 라인은 무엇입니까? 응용 프로그램의 인스턴스와 같은 CPU 및 메모리 사용량은 얼마입니까? Hello World **가 ** flex 응용 프로그램을 사용합니까? – Nicholas

답변

1

문제는 나의 건강 체크 기능이었다. 그때 인스턴스를 관리하는 방법에 대한 설명서에서이 문장을 발견

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

: 원래는이처럼 보였다

당신은 자신 만의 건강 검사 코드를 작성할 수 있습니다. HTTP 상태 코드 200으로/_ah/health 요청에 응답해야합니다. 응답에는 메시지 본문이 포함되어야하지만 본문 값은 무시됩니다 (비어있을 수 있음).

그래서 나는 응답 간단한 "확인"을 작성하는 상태 점검 기능을 변경 :

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

인스 턴스 지금 내 자동 스케일 설정에 따라 행동! 부활은 사라졌습니다.

필자는 문서를 더 가깝게 읽었 음에 틀림 없지만 상태 검사 로그에 문제가 없음을 나타냅니다. 모든 건강 검사는 통과 한 것처럼 보입니다. 다행히도이 정보는 다른 사람들에게 도움이되기를 바랍니다.