Halaman ini menjelaskan error inisialisasi dan penayangan aplikasi umum di App Engine serta metode untuk memecahkan masalahnya.
Error izin saat membuat aplikasi dengan akun layanan default
Saat Anda membuat aplikasi setelah mengaktifkan App Engine API untuk pertama kalinya, aplikasi tersebut mungkin gagal dengan error berikut:
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
Log permintaan
Service account creation is not allowed on this project.
Konsol
Error while initialising App Engine.
Error ini mungkin terjadi karena penerapan batasan kebijakan organisasi constraints/iam.disableServiceAccountCreation
saat membuat aplikasi. Kebijakan ini mencegah penyediaan akun layanan default App Engine PROJECT_ID@appspot.gserviceaccount.com
.
Untuk mengatasi masalah ini, Anda harus menghapus batasan kebijakan organisasi constraints/iam.disableServiceAccountCreation
untuk sementara agar pembuatan dan deployment akun layanan default App Engine dapat dilakukan. Akun layanan default
diperlukan untuk pembuatan aplikasi dan tidak dapat dilewati. Hal ini juga berlaku saat Anda menggunakan akun layanan per versi.
Akun layanan default App Engine dapat dihapus atau diganti dengan akun layanan yang Anda buat setelah deployment berhasil.
Jika Anda menggunakan akun layanan yang Anda buat, tinjau Ringkasan rekomendasi peran untuk memahami cara menerapkan izin yang membatasi, seperti memberikan peran pembuat token di akun layanan yang Anda buat untuk agen layanan.
Aplikasi tidak menayangkan perubahan kode terbaru
Jika aplikasi tidak menayangkan perubahan kode terbaru setelah deployment, Anda dapat menggunakan sistem file root penampung untuk memeriksa kontennya. Langkah-langkah pemecahan masalah berikut menunjukkan cara mengambil image container, dan mengekspor sistem file root untuk analisis lebih lanjut:
Gunakan Cloud Logging untuk mendapatkan URL image container, dengan filter
GAE_FULL_APP_CONTAINER
. Setelah Anda menerapkan filter, Cloud Logging akan menampilkan URL image penampung, dengan nama domain yang sepenuhnya memenuhi syarat (FQDN). Contohnya,GAE_FULL_APP_CONTAINER: FQDN/PROJECT_ID/appengine/SERVICE_NAME.VERSION_ID@sha256:SHA256_DIGEST
.Jalankan perintah berikut untuk mengekspor URL image container:
export IMAGE_URL='FQDN/PROJECT_ID/appengine/SERVICE_NAME.VERSION_ID@sha256:SHA256_DIGEST'
Ganti:
- FQDN dengan nama domain yang sepenuhnya memenuhi syarat dari URL image container.
- PROJECT_ID dengan project ID Google Cloud project Anda.
- SERVICE_NAME dengan nama layanan Anda.
- VERSION_ID dengan ID versi layanan.
- SHA256_DIGEST dengan nilai SHA256.
Buat penampung baru dengan URL image container:
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`
Mengekspor sistem file root (
rootfs
) dari image container: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
Atau, jika Anda tidak memerlukan file
TAR
, jalankan perintah berikut:mkdir gae_app cd gae_app/ docker export ${CONTAINER_ID} | tar -xC <dest> ls -la # inspect the container FS
Analisis konten sistem file root untuk memverifikasi apakah perubahan kode terbaru ada.
Jalankan perintah berikut untuk membersihkan image:
docker container rm ${CONTAINER_ID} docker image rm ${IMAGE_URL} unset IMAGE_URL CONTAINER_ID
Nginx gagal terhubung atau menghubungi container aplikasi
Error berikut hanya terjadi di lingkungan fleksibel App Engine dan biasanya ditampilkan dengan error 502 segera setelah error:
recv() failed (104: Connection reset by peer) while reading response header from upstream
Error ini menunjukkan bahwa reverse proxy nginx (file bantuan nginx) tidak dapat menjangkau container aplikasi. Di log, Anda dapat membandingkan waktu tutup error 502 di log nginx dengan waktu log nginx.error. Nginx.error yang diikuti langsung dengan error nginx 502 kemungkinan menjadi penyebab error nginx 502.
Error ini sering terjadi saat waktu tunggu koneksi keepalive aplikasi lebih kecil daripada waktu tunggu keepalive nginx. Karena nginx di lingkungan fleksibel App Engine memiliki keepalive_timeout
650 detik, aplikasi harus menjaga koneksi tetap aktif setidaknya selama ini. Secara default, aplikasi Node.js memiliki keepAliveTimeout
berdurasi 5.000 milidetik. Dalam hal ini, Anda dapat menetapkan server.keepAliveTimeout
ke 700.000 milidetik.
Untuk memecahkan masalah, periksa log yang ditulis oleh kode yang berjalan di penampung aplikasi Anda dengan menghubungkan ke instance VM, dan tambahkan logging lainnya, jika perlu, untuk menemukan akar masalahnya.
Memori tidak cukup
Error kehabisan memori berikut terjadi di lingkungan fleksibel App Engine, dan biasanya ditampilkan dengan error 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
Error ini menunjukkan bahwa App Engine telah menghentikan aplikasi.
Error ini terjadi saat instance tidak memiliki memori yang cukup. Secara default, lingkungan fleksibel App Engine memiliki memori 1 GB, dengan hanya 600 MB yang tersedia untuk container aplikasi.
Untuk memecahkan masalah, periksa log untuk menemukan entri kehabisan memori, dan perbarui konfigurasi memory_gb
di file app.yaml
, lalu deploy ulang.
Koneksi terbuka tidak memadai untuk menangani permintaan masuk
Aplikasi mungkin mengalami error 502 jika jumlah maksimum koneksi yang menunggu sama dengan atau lebih besar dari 75% jumlah koneksi aktif.
Untuk mengatasi masalah ini, periksa metrik Cloud Monitoring untuk mengetahui jumlah maksimum koneksi aktif dan menunggu, dan kurangi jumlah koneksi yang menunggu untuk memastikan bahwa jumlah maksimum koneksi yang menunggu kurang dari atau sama dengan 75% dari jumlah koneksi aktif.