Auf dieser Seite werden häufige Fehler bei der App-Initialisierung und beim Bereitstellen in der App Engine beschrieben. Außerdem finden Sie hier Methoden zur Fehlerbehebung.
Berechtigungsfehler beim Erstellen einer Anwendung mit dem Standarddienstkonto
Wenn Sie eine Anwendung erstellen, nachdem Sie die App Engine API zum ersten Mal aktiviert haben, schlägt sie möglicherweise mit folgenden Fehlern fehl:
gcloud-CLI
An internal error occurred while calling service consumer manager for service account.
Creating App Engine application in projectPROJECT and REGION....failed. DEBUG: (gcloud.app.create) Error Response: [13] an internal error has occurred
Anforderungsprotokolle
Service account creation is not allowed on this project.
Console
Error while initialising App Engine.
Dieser Fehler kann aufgrund der Erzwingung der Organisationsrichtlinieneinschränkung constraints/iam.disableServiceAccountCreation
beim Erstellen Ihrer Anwendung auftreten. Diese Richtlinie verhindert die Bereitstellung des App Engine-Standarddienstkontos PROJECT_ID@appspot.gserviceaccount.com
.
Um dieses Problem zu beheben, müssen Sie die Einschränkung der Organisationsrichtlinie constraints/iam.disableServiceAccountCreation
vorübergehend entfernen, damit das App Engine-Standarddienstkonto erstellt und bereitgestellt werden kann. Das Standarddienstkonto ist für die App-Erstellung erforderlich und kann nicht übersprungen werden. Das gilt auch, wenn Sie ein versionsspezifisches Dienstkonto verwenden.
Das App Engine-Standarddienstkonto kann gelöscht oder durch ein Dienstkonto ersetzt werden, das Sie nach der erfolgreichen Bereitstellung erstellen.
Wenn Sie ein von Ihnen erstelltes Dienstkonto verwenden, lesen Sie die Übersicht über Rollenempfehlungen, um zu verstehen, wie Sie eingeschränkte Berechtigungen erzwingen können, z. B. durch Bereitstellen einer Tokenersteller-Rolle für das Dienstkonto, das Sie für den Dienst-Agent erstellen.
Die Anwendung sendet nicht die neuesten Codeänderungen
Wenn Ihre Anwendung nach der Bereitstellung nicht die neuesten Codeänderungen ausliefert, können Sie den Inhalt über das Stammdateisystem des Containers prüfen. In den folgenden Schritten zur Fehlerbehebung wird gezeigt, wie Sie das Container-Image abrufen und das Stammdateisystem zur weiteren Analyse exportieren:
Verwenden Sie Cloud Logging mit dem Filter
GAE_FULL_APP_CONTAINER
, um die URL des Container-Images abzurufen. Nachdem Sie den Filter angewendet haben, wird in Cloud Logging die URL des Container-Images mit Ihrem voll qualifizierten Domainnamen (FQDN) angezeigt. Beispiel:GAE_FULL_APP_CONTAINER: FQDN/PROJECT_ID/appengine/SERVICE_NAME.VERSION_ID@sha256:SHA256_DIGEST
.Führen Sie den folgenden Befehl aus, um die URL des Container-Images zu exportieren:
export IMAGE_URL='FQDN/PROJECT_ID/appengine/SERVICE_NAME.VERSION_ID@sha256:SHA256_DIGEST'
Ersetzen Sie:
- FQDN durch den voll qualifizierten Domainnamen der Container-Image-URL.
- PROJECT_ID durch die Projekt-ID Ihres Projekts. Google Cloud
- SERVICE_NAME durch den Dienstnamen.
- VERSION_ID durch die Versions-ID des Dienstes.
- SHA256_DIGEST durch den Wert SHA256.
Erstellen Sie einen neuen Container mit der URL des Container-Images:
docker pull ${IMAGE_URL} export CONTAINER_ID=$(docker create ${IMAGE_URL}) docker ps -a # the list should contain the newly created container with status `Created`
Exportieren Sie das Root-Dateisystem (
rootfs
) des Container-Images:docker export ${CONTAINER_ID} -o gae_app.tar mkdir gae_app mv -v gae_app.tar gae_app/ cd gae_app/ tar -xf gae_app.tar ls -la # inspect the container FS
Wenn Sie die Datei
TAR
nicht benötigen, können Sie auch den folgenden Befehl ausführen:mkdir gae_app cd gae_app/ docker export ${CONTAINER_ID} | tar -xC <dest> ls -la # inspect the container FS
Analysieren Sie den Inhalt des Stammdateisystems, um zu prüfen, ob die neuesten Codeänderungen vorhanden sind.
Führen Sie den folgenden Befehl aus, um das Image zu bereinigen:
docker container rm ${CONTAINER_ID} docker image rm ${IMAGE_URL} unset IMAGE_URL CONTAINER_ID
Nginx kann keine Verbindung zu dem Anwendungscontainer herstellen oder diese kontaktieren
Der folgende Fehler tritt nur in der flexiblen App Engine-Umgebung auf und wird in der Regel sofort nach dem Fehler mit 502-Fehlern zurückgegeben:
recv() failed (104: Connection reset by peer) while reading response header from upstream
Dieser Fehler gibt an, dass der nginx-Reverse-Proxy (nginx-Sidecar) den Anwendungscontainer nicht erreichen kann. In den Logs können Sie die Schließen-Zeit des 502-Fehlers im nginx-Log mit dem Zeitpunkt des nginx.error-Logs vergleichen. Ein nginx.error gefolgt von einem 502 nginx-Fehler ist wahrscheinlich die Ursache des nginx 502-Fehlers.
Dieser Fehler tritt häufig auf, wenn das Keepalive-Zeitlimit der Verbindung für die Anwendung kleiner ist als das Keepalive-Zeitlimit von nginx. Da nginx in der flexiblen App Engine-Umgebung ein keepalive_timeout
von 650 Sekunden hat, müssen Anwendungen die Verbindungen mindestens so lange aktiv halten. Standardmäßig haben Node.js-Anwendungen eine keepAliveTimeout
von 5.000 Millisekunden. In diesem Fall können Sie für server.keepAliveTimeout
700.000 Millisekunden festlegen.
Zur Fehlerbehebung können Sie die Logs prüfen, die vom Code im Anwendungscontainer geschrieben wurden. Dazu stellen Sie eine Verbindung zur VM-Instanz her und fügen bei Bedarf weitere Logging hinzu, um die Ursache zu ermitteln.
Unzureichender Speicher
Der folgende Fehler „Nicht genügend Arbeitsspeicher“ tritt in der flexiblen App Engine-Umgebung auf und gibt in der Regel den Fehler 502 zurück:
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
Dieser Fehler gibt an, dass App Engine die Anwendung beendet hat.
Dieser Fehler tritt auf, wenn die Instanz nicht genügend Speicher hat. Standardmäßig hat die flexible App Engine-Umgebung 1 GB Speicher, wobei dem Anwendungscontainer lediglich 600 MB zur Verfügung stehen.
Prüfen Sie, ob in den Logs ein Eintrag in Bezug auf fehlenden Speichers vorliegt, um das Problem zu beheben. Aktualisieren Sie dann die memory_gb
-Konfiguration in der Datei app.yaml
und führen Sie eine Neubereitstellung durch.
Unzureichende offene Verbindungen zum Verarbeiten eingehender Anfragen
Bei Anwendungen wird möglicherweise der Fehler 502 angezeigt, wenn die maximale Anzahl der wartenden Verbindungen gleich oder größer als 75% der Anzahl aktiver Verbindungen ist.
Prüfe zur Behebung des Problems die Cloud Monitoring-Messwerte für die maximale Anzahl aktiver und wartender Verbindungen und verringere die Anzahl der wartenden Verbindungen, um sicherzustellen, dass die maximale Anzahl der wartenden Verbindungen gleich oder weniger als 75% der Anzahl aktiver Verbindungen beträgt.