서빙 문제 해결

다음 섹션에서는 앱 초기화와 서빙 오류를 설명합니다.

기본 서비스 계정으로 앱을 만들 때의 권한 오류

App Engine API를 처음 사용 설정한 후 앱을 만들면 다음 오류가 표시되면서 실패합니다.

gcloud CLI

An internal error occurred while calling service consumer manager for service account.
Creating  App Engine application in project [PROJECT__ID] and [REGION]....failed. DEBUG: (gcloud.app.create) Error Response: [13] an internal error has occurred

로그 요청

Service account creation is not allowed on this project.

콘솔

Error while initialising App Engine.

이 오류는 앱을 만들 때 조직 정책 제약조건 constraints/iam.disableServiceAccountCreation 적용으로 인해 발생할 수 있습니다. 이 정책은 App Engine 기본 서비스 계정 PROJECT_ID@appspot.gserviceaccount.com의 프로비저닝을 방지합니다.

이 문제를 해결하려면 App Engine 기본 서비스 계정을 만들고 배포할 수 있도록 조직 정책 제약조건 constraints/iam.disableServiceAccountCreation을 일시적으로 삭제해야 합니다. 기본 서비스 계정은 앱을 만들 때 필요하며 건너뛸 수 없습니다. 버전별 서비스 계정을 사용할 때도 마찬가지입니다. 그런 다음 App Engine 기본 서비스 계정을 삭제하거나 배포가 성공한 후에 만드는 서비스 계정으로 바꿀 수 있습니다.

만든 서비스 계정을 사용하는 경우 역할 권장사항 개요를 검토하여 서비스 에이전트에 만드는 서비스 계정에 대한 토큰 생성자 역할 제공과 같이 권한을 제한하는 방법을 알아봅니다.

Nginx가 앱 컨테이너에 연결하지 못함

다음 오류는 App Engine 가변형 환경에서만 발생하며 일반적으로 오류 발생 직후 502 오류와 함께 반환됩니다.

recv() failed (104: Connection reset by peer) while reading response header from upstream

이 오류는 nginx 리버스 프록시(nginx 사이드카)가 앱 컨테이너에 연결할 수 없음을 나타냅니다. 로그에서 nginx 로그에 있는 502 오류의 종료 시간을 nginx.error 로그의 시간과 비교할 수 있습니다. nginx.error 다음에 즉시 502 nginx 오류가 발생한 경우 nginx 502 오류의 원인일 수 있습니다.

이 오류는 애플리케이션의 연결 유지 제한 시간이 nginx의 연결 유지 제한 시간보다 작을 때 자주 발생합니다. App Engine 가변형 환경의 nginx는 keepalive_timeout이 650초이므로 애플리케이션이 최소한 이 시간 동안 연결을 유지해야 합니다. 기본적으로 Node.js 애플리케이션의 keepAliveTimeout은 5,000밀리초입니다. 이 경우 server.keepAliveTimeout을 700,000밀리초로 설정할 수 있습니다.

문제 해결을 위해서는 VM 인스턴스에 연결하여 앱 컨테이너에서 실행되는 코드에 기록된 로그를 확인하고 필요한 경우 로깅을 추가하여 근본 원인을 찾습니다.

메모리 부족

다음 오류는 App Engine 가변형 환경에서 발생하며 일반적으로 502 오류와 함께 반환됩니다.

kernel: [  133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child
kernel: [  133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB

이 오류는 App Engine이 애플리케이션을 종료했음을 나타냅니다.

이 오류는 인스턴스의 메모리가 부족할 때 발생합니다. 기본적으로 App Engine 가변형 환경의 메모리는 1GB이며 애플리케이션 컨테이너에 600MB만 사용할 수 있습니다.

문제를 해결하려면 로그를 확인하고 메모리 부족 항목이 있는지 확인합니다. memory_gb 구성을 업데이트하고 다시 배포합니다.

수신 요청을 처리할 수 있는 개방형 연결 부족

최대 대기 연결 수가 활성 연결 수의 75% 이상이면 앱에 502 오류가 발생할 수 있습니다.

문제를 해결하려면 Cloud Monitoring 측정항목에서 최대 활성 연결 수와 대기 연결 수를 확인하여 최대 대기 연결 수가 활성 연결 수의 75% 이하가 되도록 대기 연결 수를 줄입니다.