配信に関する問題のトラブルシューティング

以下の各セクションでは、アプリの初期化とサービス提供に関するエラーについて説明します。

デフォルトのサービス アカウントでアプリを作成するときに発生する権限エラー

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 をプロビジョニングできなくなります。

この問題を解決するには、組織のポリシーの制約 constraints/iam.disableServiceAccountCreation を一時的に削除して、App Engine のデフォルト サービス アカウントの作成とデプロイを許可する必要があります。デフォルトのサービス アカウントはアプリの作成に必要であり、スキップできません。これは、バージョンごとのサービス アカウントを使用する場合にも当てはまります。その後、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 には 650 秒の keepalive_timeout があるため、アプリケーションは少なくともこの期間、接続を維持する必要があります。デフォルトでは、Node.js アプリケーションの keepAliveTimeout は 5000 ミリ秒です。この場合、server.keepAliveTimeout を 700000 ミリ秒に設定できます。

トラブルシューティングを行うには、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 フレキシブル環境には 1 GB のメモリがあり、アプリケーション コンテナに使用できるメモリは 600 MB のみです。

トラブルシューティングを行うには、ログを確認し、メモリ不足のエントリがあるかどうかを確認します。memory_gb 構成を更新して再デプロイします。

受信リクエストを処理するオープン接続が不足している

待機中の接続の最大数がアクティブな接続数の 75% 以上の場合、アプリで 502 エラーが発生する可能性があります。

この問題を解決するには、Cloud Monitoring の指標でアクティブな接続と待機中の接続の最大数を確認し、待機中の接続の数を減らして、待機中の接続の最大数がアクティブな接続数の 75% 以下になるようにします。