Halaman ini menunjukkan cara memecahkan masalah pesan error dan menyelesaikan masalah saat menggunakan Cloud Run.
Anda juga dapat memeriksa masalah yang ada atau membuka masalah baru di issue tracker publik.
Untuk pesan error lainnya yang tidak tercantum di halaman ini, lihat halaman masalah umum.
Error saat deployment
Bagian ini mencantumkan masalah apa saja yang mungkin Anda alami saat deployment dan memberikan saran tentang cara memperbaiki masalah tersebut.
Container gagal memulai
Error berikut terjadi saat Anda mencoba men-deploy:
Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.
Untuk mengatasi masalah ini, abaikan kemungkinan penyebab berikut:
Pastikan Anda dapat menjalankan image container secara lokal. Jika image container tidak dapat dijalankan secara lokal, Anda harus mendiagnosis dan memperbaiki masalah secara lokal terlebih dahulu.
Periksa apakah container Anda memproses permintaan pada port yang diharapkan seperti yang tercantum dalam kontrak runtime container. Container Anda harus memproses permintaan masuk pada port yang ditentukan oleh Cloud Run dan disediakan dalam variabel lingkungan
PORT
. Baca bagian Mengonfigurasi container untuk mengetahui petunjuk cara menentukan port.Periksa apakah container Anda memproses semua antarmuka jaringan, biasanya dilambangkan dengan
0.0.0.0
.Pastikan image container Anda dikompilasi untuk Linux 64-bit seperti yang disyaratkan oleh kontrak runtime container.
Gunakan Cloud Logging untuk mencari error aplikasi di log
stdout
ataustderr
. Anda juga dapat mencari error yang tertangkap di Error Reporting.Anda mungkin perlu memperbarui kode atau setelan revisi untuk memperbaiki kesalahan atau error. Anda juga dapat memecahkan masalah layanan secara lokal.
Error user 'root' tidak ditemukan di /etc/passwd
Error berikut terjadi saat Anda mencoba men-deploy:
ERROR: "User \"root\""not found in /etc/passwd
Masalah ini terjadi saat kunci enkripsi yang dikelola pelanggan ditentukan menggunakan parameter --key
Untuk mengatasi masalah ini, tetapkan USER 0
, bukan USER root
, di
Dockerfile.
Akun layanan Compute Engine default telah dihapus
Error berikut terjadi saat Anda mencoba men-deploy:
ERROR: (gcloud.run.deploy) User EMAIL_ADDRESS does not have permission to access namespace NAMESPACE_NAME (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
Masalah ini terjadi pada situasi berikut:
- Akun Layanan
Compute Engine default
tidak muncul dalam project, dan tidak ada akun layanan yang ditentukan dengan flag
--service-account
gcloud
pada saat deployment. - Developer atau akun utama yang men-deploy layanan tersebut tidak memiliki izin untuk akun layanan Compute Engine default yang diperlukan untuk melakukan deployment.
Untuk menyelesaikan masalah ini:
- Tentukan akun layanan menggunakan flag
--service-account
gcloud
. - Pastikan akun layanan yang Anda tentukan memiliki izin yang diperlukan untuk men-deploy.
Jika Anda ingin memastikan apakah agen layanan Compute Engine default muncul di project Google Cloud, lakukan langkah-langkah berikut:
Buka konsol Google Cloud:
Di pojok kanan atas halaman Izin, pilih kotak centang Sertakan pemberian peran yang diberikan Google.
Dalam daftar Akun Utama, cari ID agen layanan Compute Engine, yang menggunakan ID
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Agen Layanan Cloud Run tidak memiliki izin untuk membaca image
Error berikut terjadi saat Anda mencoba men-deploy dari PROJECT-ID menggunakan image yang disimpan di Container Registry di PROJECT-ID-2:
Google Cloud Run Service Agent must have permission to read the image, gcr.io/PROJECT-ID/IMAGE-NAME. Ensure that the provided container image URL is correct and that above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that PROJECT-ID/IMAGE-NAME is not in project PROJECT-ID-2. Permission must be granted to the Google Cloud Run Service Agent from this project.
Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:
Ikuti petunjuk untuk men-deploy image container dari project Google Cloud lainnya guna memastikan akun utama Anda memiliki izin yang diperlukan.
Masalah ini juga dapat terjadi jika project berada di perimeter Kontrol Layanan VPC dengan pembatasan pada Cloud Storage API yang melarang permintaan dari agen layanan Cloud Run. Untuk memperbaikinya:
Buka Logs Explorer di Konsol Google Cloud. (Jangan gunakan halaman Logs di dalam halaman Cloud Run):
Masukkan teks berikut di kolom kueri:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" severity=ERROR protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" protoPayload.authenticationInfo.principalEmail="service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"
Jika Anda melihat entri log setelah menggunakan kueri ini, periksa entri log untuk menentukan apakah Anda perlu memperbarui kebijakan Kontrol Layanan VPC atau tidak. Kebijakan tersebut mungkin menunjukkan bahwa Anda perlu menambahkan
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
ke kebijakan akses yang sudah ada.
Error impor container
Error berikut terjadi saat Anda mencoba men-deploy:
The service has encountered an error during container import. Please try again later. Resource readiness deadline exceeded.
Untuk mengatasi masalah ini, abaikan kemungkinan penyebab berikut:
Pastikan sistem file container tidak berisi karakter non-utf8.
Beberapa image Docker berbasis Windows menggunakan lapisan asing. Meskipun Container Registry tidak menampilkan error ketika terdapat lapisan asing, bidang kontrol Cloud Run tidak mendukungnya. Untuk menyelesaikan masalah ini, Anda dapat mencoba menetapkan flag
--allow-nondistributable-artifacts
di daemon Docker.
Error saat inferensi
Bagian ini mencantumkan masalah yang mungkin Anda alami terkait inferensi dan memberikan saran cara memperbaiki masalah tersebut.
HTTP 401: Klien tidak diotentikasi dengan benar
Error berikut terjadi selama inferensi:
The request was not authorized to invoke this service
Untuk menyelesaikan masalah ini:
Jika dipanggil oleh akun layanan, klaim audiens (
aud
) dari token ID yang ditandatangani Google harus ditetapkan sebagai berikut:- URL Cloud Run dari layanan penerima, menggunakan formulir
https://service-xyz.run.app
.- Layanan Cloud Run harus mewajibkan autentikasi.
- Layanan Cloud Run dapat dipanggil oleh URL Cloud Run atau melalui URL load balancer.
- Client ID dari Client ID OAuth 2.0 dengan jenis aplikasi Web, menggunakan
formulir
nnn-xyz.apps.googleusercontent.com
.- Layanan Cloud Run dapat dipanggil melalui load balancer HTTPS yang didapatkan oleh IAP.
- Bagus untuk GCLB yang didukung oleh beberapa layanan Cloud Run di region yang berbeda.
- Audiens kustom yang dikonfigurasi menggunakan nilai persis yang diberikan. Misalnya,
jika audiens kustom adalah
service.example.com
, nilai klaim audiens (aud
) juga harusservice.example.com
. Jika audiens kustom adalahhttps://service.example.com
, nilai klaim audiens juga harushttps://service.example.com
.
- URL Cloud Run dari layanan penerima, menggunakan formulir
Solusi jwt.io cocok untuk memeriksa klaim pada JWT.
Jika format token autentikasi tidak valid, maka akan terjadi error
401
. Jika token memiliki format yang valid dan anggota IAM yang digunakan untuk membuat token tidak memiliki izinrun.routes.invoke
, maka akan terjadi error403
.Saat Anda menggunakan server metadata untuk mengambil token ID dan akses untuk mengautentikasi permintaan dengan layanan Cloud Run atau identitas tugas dengan proxy HTTP untuk merutekan traffic keluar, dan Anda mendapatkan token yang tidak valid, pastikan Anda menambahkan host berikut ke pengecualian proxy HTTP:
169.254.*
atau169.254.0.0/16
*.google.internal
Error ini biasanya terjadi saat Library Klien Cloud menggunakan server metadata untuk mengambil Kredensial Default Aplikasi guna mengautentikasi pemanggilan REST atau gRPC. Jika Anda tidak menentukan pengecualian proxy HTTP, perilaku berikut akan dihasilkan:
Jika layanan atau tugas Cloud Run dan proxy HTTP dihosting dalam beban kerja Google Cloud yang berbeda, meskipun Library Klien Google Cloud dapat mendapatkan kredensial, token akan dibuat untuk akun layanan yang ditetapkan ke beban kerja proxy HTTP, yang mungkin tidak memiliki izin yang diperlukan untuk melakukan operasi Google Cloud API yang diinginkan. Dalam hal ini, token diambil dari tampilan server metadata beban kerja proxy HTTP, bukan dari server Cloud Run.
Jika proxy HTTP tidak dihosting di Google Cloud dan permintaan server metadata dirutekan menggunakan proxy, permintaan token akan gagal dan operasi Google Cloud API tidak akan diautentikasi.
HTTP 403: Klien tidak diizinkan untuk memanggil layanan
Error berikut bisa jadi muncul atau tidak di Cloud Logging dengan resource.type = "cloud_run_revision":
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header
Error berikut muncul pada respons HTTP yang ditampilkan ke klien:
403 Forbidden Your client does not have permission to get URL from this server.
Untuk mengatasi masalah ini saat resource.type = "cloud_run_revision" maka terdapat error pada Cloud Logging :
- Jika layanan dimaksudkan untuk dapat dipanggil oleh siapa saja, maka update setelan IAM-nya untuk menjadikan layanan tersebut publik.
- Jika layanan hanya dimaksudkan untuk dipanggil oleh identitas tertentu,
pastikan Anda
memanggilnya dengan token otorisasi yang tepat.
- Jika
dipanggil oleh developer
atau
dipanggil oleh pengguna akhir:
Pastikan developer atau pengguna memiliki izin
run.routes.invoke
, yang dapat Anda berikan melalui peran Cloud Run Admin (roles/run.admin
) dan Cloud Run Invoker (roles/run.invoker
). - Jika
dipanggil oleh akun layanan:
Pastikan akun layanan adalah anggota layanan Cloud Run
dan memiliki peran Cloud Run
Invoker (
roles/run.invoker
). - Panggilan tidak memiliki token autentikasi atau dengan token autentikasi yang memiliki format
valid, tetapi anggota IAM yang digunakan untuk membuat token tidak memiliki
izin
run.routes.invoke
. Ini menyebabkan terjadinya error403
.
- Jika
dipanggil oleh developer
atau
dipanggil oleh pengguna akhir:
Pastikan developer atau pengguna memiliki izin
Untuk mengatasi masalah ini jika resource.type = "cloud_run_revision" maka error pada Cloud Logging tidak ada:
- Kode status 403 dapat ditampilkan saat layanan masuk
dikonfigurasi ke
All
, tetapi diblokir karena Kontrol Layanan VPC. Lihat bagian selanjutnya tentang error 404 untuk mengetahui informasi selengkapnya tentang pemecahan masalah penolakan Kontrol Layanan VPC.
HTTP 403: Error saat mengakses layanan dari browser web
Masalah berikut terjadi saat Anda mengakses layanan Cloud Run dari browser web:
403 Forbidden
Your client does not have permission to get URL from this server.
Saat Anda memanggil layanan Cloud Run dari browser web, browser
akan mengirimkan permintaan GET
ke layanan. Namun,
permintaan tidak berisi token otorisasi pengguna yang memanggil. Untuk mengatasi masalah ini, pilih salah satu solusi berikut:
Menggunakan Identity-Aware Proxy (IAP) dengan Cloud Run. Dengan IAP, Anda dapat membuat lapisan otorisasi pusat untuk aplikasi yang diakses melalui HTTPS. Dengan IAP, Anda dapat menggunakan model kontrol akses tingkat aplikasi, bukan firewall tingkat jaringan. Untuk mengetahui detail selengkapnya tentang cara mengonfigurasi Cloud Run dengan IAP, lihat Mengaktifkan Identity-Aware Proxy untuk Cloud Run.
Sebagai solusi sementara, Anda dapat mengakses layanan melalui browser web menggunakan proxy Cloud Run di Google Cloud CLI. Anda dapat melakukan proxy layanan secara lokal menggunakan hal berikut:
gcloud run services proxy SERVICE --project PROJECT-ID
Setelah Anda menjalankan perintah ini, Cloud Run akan membuat proxy layanan pribadi ke
http://localhost:8080
(atau ke port yang Anda tentukan dengan--port
), yang memberikan token akun aktif atau token lain yang Anda tentukan. Cara ini direkomendasikan untuk menguji situs atau API secara pribadi di browser Anda. Untuk informasi selengkapnya, lihat Menguji layanan pribadi.Mengizinkan pemanggilan yang tidak diautentikasi ke layanan Anda. Hal ini berguna untuk pengujian, atau jika layanan Anda adalah API atau situs publik.
HTTP 404: Tidak Ditemukan
Masalah berikut terjadi selama inferensi:
Anda mengalami error HTTP 404
.
Untuk menyelesaikan masalah ini:
Pastikan bahwa URL yang Anda minta sudah benar dengan memeriksa halaman detail layanan di konsol Google Cloud atau dengan menjalankan perintah berikut:
gcloud run services describe SERVICE_NAME | grep URL
Periksa di mana logika aplikasi Anda mungkin akan menampilkan kode error
404
. Jika aplikasi Anda menampilkan404
, hal tersebut akan muncul di Cloud Logging.Pastikan aplikasi Anda tidak mulai memproses port yang dikonfigurasi sebelum siap menerima permintaan.
Pastikan aplikasi tidak menampilkan kode error
404
saat Anda menjalankannya secara lokal.
404
ditampilkan saat
setelan masuk layanan Cloud Run disetel ke
"Internal" atau "Internal dan Cloud Load Balancing" dan permintaan tidak
memenuhi batasan jaringan yang ditentukan. Hal ini juga dapat terjadi jika URL run.app
default layanan Cloud Run dinonaktifkan dan klien mencoba menjangkau layanan di URL run.app
tersebut. Dalam kedua skenario tersebut, permintaan
tidak mencapai penampung dan 404
tidak ada di
Cloud Logging dengan filter berikut:
resource.type="cloud_run_revision"
log_name="projects/PROJECT_ID/logs/run.googleapis.com%2Frequests"
httpRequest.status=404
Dengan setelan ingress yang sama, permintaan mungkin diblokir oleh Kontrol Layanan VPC berdasarkan konteks pemanggil, termasuk project dan alamat IP. Untuk memeriksa pelanggaran kebijakan Kontrol Layanan VPC:
Buka Logs Explorer di Konsol Google Cloud (bukan halaman Logs untuk Cloud Run):
Masukkan teks berikut di kolom kueri:
resource.type="audited_resource" log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" resource.labels.method="run.googleapis.com/HttpIngress"
Jika Anda melihat entri log setelah menggunakan kueri ini, periksa entri log untuk menentukan apakah Anda perlu memperbarui kebijakan Kontrol Layanan VPC atau tidak.
Anda mungkin juga melihat error 404
saat mengakses
endpoint layanan dengan load balancer menggunakan runtime Python. Untuk mengatasi masalah ini, verifikasi mask URL untuk load balancer Anda, dan pastikan jalur URL yang Anda tentukan untuk load balancer cocok dengan jalur dalam kode sumber python Anda.
HTTP 429: Instance container tidak tersedia
Error berikut terjadi selama inferensi:
HTTP 429 The request was aborted because there was no available instance. The Cloud Run service might have reached its maximum container instance limit or the service was otherwise not able to scale to incoming requests. This might be caused by a sudden increase in traffic, a long container startup time or a long request processing time.
Untuk mengatasi masalah ini, periksa metrik "Jumlah instance container" untuk layanan Anda dan pertimbangkan untuk meningkatkan batas ini jika penggunaan Anda mendekati batas maksimum. Lihat setelan "maks instance", dan jika Anda memerlukan lebih banyak instance, minta tambahan kuota.
HTTP 500: Cloud Run tidak dapat mengelola laju traffic
Error berikut terjadi selama inferensi dan juga dapat terjadi saat layanan belum mencapai batas instance container maksimum:
HTTP 500 The request was aborted because there was no available instance
Error ini dapat disebabkan oleh salah satu hal berikut:
- Peningkatan traffic mendadak.
- Waktu cold start yang lama.
- Waktu pemrosesan permintaan yang lama, atau peningkatan waktu pemrosesan permintaan yang mendadak.
- Layanan mencapai batas instance container maksimum (
HTTP 429
). - Faktor sementara yang dikaitkan dengan layanan Cloud Run.
Untuk mengatasi masalah ini, atasi masalah yang tercantum sebelumnya.
Selain memperbaiki masalah ini, sebagai solusinya, Anda dapat menerapkan backoff eksponensial dan mencoba ulang permintaan yang tidak boleh dihapus oleh klien.
Perhatikan bahwa peningkatan traffic atau waktu pemrosesan permintaan yang singkat dan mendadak mungkin hanya terlihat di Cloud Monitoring jika Anda memperbesarnya ke resolusi 10 detik.
Jika akar masalah ini adalah periode peningkatan error sementara yang hanya disebabkan oleh Cloud Run, Anda dapat menghubungi Dukungan.
HTTP 501: Operasi tidak diterapkan
Error berikut terjadi selama inferensi:
HTTP 501
Operation is not implemented, or supported, or enabled.
Masalah ini terjadi saat Anda menentukan REGION yang salah saat memanggil
tugas Cloud Run. Misalnya, error ini dapat terjadi saat Anda men-deploy tugas di region asia-southeast1
, dan memanggil tugas menggunakan southeast1-asia
atau asia-southeast
. Untuk daftar region yang didukung, lihat Lokasi Cloud Run.
HTTP 503: Kredensial default tidak ditemukan
Error berikut terjadi selama inferensi:
HTTP 503
System.InvalidOperationException System.InvalidOperationException your Default
credentials were not found.
Masalah ini terjadi saat aplikasi Anda tidak diautentikasi dengan benar karena file tidak ada, jalur kredensial tidak valid, atau penetapan variabel lingkungan yang salah.
Untuk menyelesaikan masalah ini:
Siapkan Kredensial Default Aplikasi (ADC) dengan kredensial yang dikaitkan dengan Akun Google Anda. Konfigurasikan ADC menggunakan:
gcloud auth application-default login
Layar login akan muncul. Setelah Anda login, kredensial Anda disimpan dalam file kredensial lokal yang digunakan oleh ADC.
Gunakan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
untuk memberikan lokasi file JSON kredensial dalam project Google Cloud Anda.
Untuk informasi selengkapnya, lihat Menyiapkan Kredensial Default Aplikasi.
HTTP 500 / HTTP 503: Instance container melebihi batas memori
Error berikut terjadi selama inferensi:
Pada Cloud Logging:
While handling this request, the container instance was found to be using too much memory and was terminated. This is likely to cause a new container instance to be used for the next request to this revision. If you see this message frequently, you may have a memory leak in your code or may need more memory. Consider creating a new revision with more memory.
Untuk menyelesaikan masalah ini:
- Tentukan apakah instance container Anda melebihi memori yang tersedia
Cari kesalahan terkait di log
varlog/system
. - Jika instance melebihi memori yang tersedia, pertimbangkan untuk meningkatkan batas memori.
Perhatikan bahwa di Cloud Run, file yang ditulis ke sistem file lokal memengaruhi
memori yang tersedia. Hal ini juga mencakup segala file log yang ditulis
ke lokasi selain /var/log/*
dan /dev/log
.
HTTP 503: Masalah koneksi instance container atau respons yang salah
Salah satu error berikut terjadi selama inferensi:
HTTP 503 The request failed because either the HTTP response was malformed or connection to the instance had an error.
Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:
Periksa Cloud Logging Gunakan Cloud Logging untuk mencari error kehabisan memori dalam log. Jika Anda melihat pesan error terkait instance container yang melebihi batas memori, ikuti rekomendasi untuk menyelesaikan masalah ini.
Waktu tunggu level aplikasi Jika permintaan dihentikan dengan kode error
503
sebelum mencapai waktu tunggu permintaan yang ditetapkan di Cloud Run, Anda mungkin perlu melakukan update setelan waktu tunggu permintaan untuk framework bahasa Anda:- Developer Node.js mungkin perlu memperbarui
properti
server.timeout
melaluiserver.setTimeout
(gunakanserver.setTimeout(0)
untuk mencapai waktu tunggu yang tidak terbatas) bergantung pada versi yang Anda gunakan. [CRITICAL] WORKER TIMEOUT
Developer Python perlu memperbarui waktu tunggu default Gunicorn.
- Developer Node.js mungkin perlu memperbarui
properti
Bottleneck jaringan downstream Dalam beberapa kasus, kode error
503
dapat mengakibatkan secara tidak langsung dari bottleneck jaringan downstream, seperti selama pengujian beban. Misalnya, jika layanan Anda merutekan traffic melalui konektor Akses VPC Serverless, pastikan konektor tidak melampaui batas throughput dengan mengikuti langkah-langkah berikut:Buka Akses VPC Serverless di Konsol Google Cloud:
Periksa apakah ada batang merah di histogram chart throughput. Jika ada batang merah, pertimbangkan untuk meningkatkan jumlah maksimum instance atau jenis instance yang digunakan konektor Anda. Atau, kompresi traffic yang dikirim melalui konektor Akses VPC Serverless.
Batas permintaan masuk ke satu container Ada masalah umum yang menyatakan, saat ada rasio permintaan tinggi per container di situ akan terjadi error
503
. Jika instance container menerima lebih dari 800 permintaan per detik, soket TCP yang tersedia dapat habis. Untuk mengatasinya, coba salah satu langkah berikut:Aktifkan HTTP/2 untuk layanan Anda dan buat perubahan yang diperlukan pada layanan untuk mendukung HTTP/2.
Hindari mengirim lebih dari 800 permintaan/detik ke satu instance container dengan menurunkan konkurensi yang dikonfigurasi. Gunakan persamaan berikut untuk mendapatkan estimasi rasio permintaan per instance container:
requests/sec/container_instance ~= concurrency * (1sec / median_request_latency)
HTTP 503: Tidak dapat memproses beberapa permintaan karena setelan konkurensi yang tinggi
Error berikut terjadi selama inferensi:
HTTP 503 The Cloud Run service probably has reached its maximum container instance limit. Consider increasing this limit.
Masalah ini terjadi saat instance container Anda menggunakan banyak CPU untuk
memproses permintaan, sehingga instance container tidak dapat memproses semua
permintaan sehingga beberapa permintaan menampilkan kode error 503
.
Untuk mengatasi masalah ini, coba satu atau beberapa langkah berikut:
Tingkatkan jumlah maksimum instance container untuk layanan Anda.
Turunkan konkurensi layanan. Lihat menyetel konkurensi untuk mengetahui petunjuk yang lebih mendetail.
HTTP 504: Error waktu tunggu gateway
HTTP 504 The request has been terminated because it has reached the maximum request timeout.
Jika layanan Anda memproses permintaan yang panjang, Anda dapat
meningkatkan waktu tunggu permintaan. Jika layanan
Anda tidak menampilkan respons dalam waktu yang ditentukan, permintaan akan berakhir
dan layanan akan menampilkan error HTTP 504
, seperti yang tercantum dalam
kontrak runtime container ini.
Untuk memecahkan masalah ini, coba satu atau beberapa langkah berikut:
Logging instrumen dan trace untuk memahami di mana waktu aplikasi Anda dihabiskan sebelum melebihi waktu tunggu permintaan yang dikonfigurasi.
Terkadang Koneksi keluar direset karena pembaruan infrastruktur. Jika aplikasi Anda menggunakan kembali koneksi yang memakan waktu lama, sebaiknya konfigurasikan aplikasi Anda agar menghubungkan koneksi kembali guna menghindari penggunaan ulang koneksi yang tidak aktif.
- Bergantung pada logika aplikasi atau penanganan error Anda, error
504
mungkin merupakan sinyal bahwa aplikasi Anda mencoba menggunakan kembali koneksi yang tidak aktif dan permintaan akan diblokir hingga waktu tunggu permintaan yang dikonfigurasi habis. - Anda dapat menggunakan pemeriksaan keaktifan untuk membantu menghentikan instance yang terus-menerus menampilkan error.
- Bergantung pada logika aplikasi atau penanganan error Anda, error
Error kehabisan memori yang terjadi dalam kode aplikasi, misalnya
java.lang.OutOfMemoryError
, tidak selalu menghentikan instance container. Jika penggunaan memori tidak melebihi batas memori container, instance tidak akan dihentikan. Bergantung pada cara aplikasi menangani error kehabisan memori level aplikasi, permintaan mungkin akan berhenti sampai melebihi waktu tunggu permintaan yang dikonfigurasi.- Jika Anda ingin instance container dihentikan dalam skenario di atas, konfigurasikan batas memori level aplikasi agar lebih besar dari batas memori container Anda.
- Anda dapat menggunakan pemeriksaan keaktifan untuk membantu menghentikan instance yang terus-menerus menampilkan error
Reset koneksi oleh pembanding
Salah satu error berikut terjadi selama inferensi:
Connection reset by peer
asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation
grpc.StatusRuntimeException: UNAVAILABLE: io exception
psycopg.OperationalError: the connection is closed
ECONNRESET
Error ini terjadi saat aplikasi terhubung ke TCP yang terhubung dengan pembanding di seluruh jaringan dan pembanding tersebut secara tidak terduga menutup koneksi.
Untuk menyelesaikan masalah ini:
Jika Anda mencoba melakukan pekerjaan latar belakang dengan throttling CPU, coba gunakan setelan alokasi CPU"CPU selalu dialokasikan".
Pastikan Anda berada dalam waktu tunggu permintaan keluar. Jika aplikasi Anda mempertahankan koneksi dalam status tidak ada aktivitas di luar batas ini, maka gateway harus menerima koneksi tersebut.
Secara default, opsi soket TCP
keepalive
dinonaktifkan untuk Cloud Run. Tidak ada cara langsung untuk mengonfigurasi opsikeepalive
di Cloud Run pada tingkat layanan, tetapi Anda dapat mengaktifkan opsikeepalive
untuk setiap koneksi soket dengan memberikan opsi soket yang benar saat membuka koneksi soket TCP baru, tergantung pada library klien yang digunakan untuk koneksi ini di aplikasi Anda.Terkadang koneksi keluar akan direset karena adanya pembaruan infrastruktur. Jika aplikasi Anda menggunakan kembali koneksi yang memakan waktu lama, sebaiknya konfigurasikan aplikasi Anda agar menghubungkan koneksi kembali guna menghindari penggunaan ulang koneksi yang tidak aktif.
Jika Anda menggunakan proxy HTTP untuk merutekan layanan Cloud Run atau traffic keluar tugas dan proxy menerapkan durasi koneksi maksimum, proxy mungkin secara diam-diam menghentikan koneksi TCP yang berjalan lama seperti yang dibuat menggunakan penggabungan koneksi. Hal ini menyebabkan klien HTTP gagal saat menggunakan kembali koneksi yang sudah ditutup. Jika Anda ingin merutekan traffic keluar melalui proxy HTTP, pastikan Anda memperhitungkan skenario ini dengan menerapkan validasi koneksi, percobaan ulang, dan backoff eksponensial. Untuk kumpulan koneksi, konfigurasikan nilai maksimum untuk usia koneksi, koneksi tidak ada aktivitas, dan waktu tunggu koneksi tidak ada aktivitas.
Waktu tunggu koneksi habis
Error latensi atau salah satu error berikut terjadi saat ada waktu tunggu koneksi saat membuat permintaan ke host jarak jauh:
java.io.IOException: Connection timed out
ConnectionError: HTTPSConnectionPool
dial tcp REMOTE_HOST:REMOTE_PORT: i/o timeout / context error
Error: 4 DEADLINE_EXCEEDED: Deadline exceeded
Jenis error ini terjadi saat aplikasi mencoba membuat koneksi TCP baru dengan host jarak jauh dan koneksi memerlukan waktu terlalu lama untuk dibuat.
Jika Anda merutekan semua traffic keluar melalui jaringan VPC, baik menggunakan konektor VPC maupun traffic keluar VPC Langsung, pastikan:
Anda telah menentukan semua aturan firewall yang diperlukan untuk mengizinkan traffic masuk untuk konektor VPC.
Aturan firewall VPC Anda mengizinkan traffic masuk dari konektor VPC atau subnet traffic keluar VPC Langsung untuk menjangkau host atau subnet tujuan.
Anda memiliki semua rute yang diperlukan untuk mengizinkan perutean traffic yang benar ke host tujuan dan kembali. Hal ini penting saat merutekan traffic keluar melalui Peering Jaringan VPC atau konektivitas cloud hybrid, karena paket melintasi beberapa jaringan sebelum mencapai host jarak jauh.
Jika Anda menggunakan proxy HTTP untuk merutekan semua traffic keluar dari layanan atau tugas Cloud Run, pastikan host jarak jauh dapat dijangkau menggunakan proxy.
Traffic yang dirutekan melalui proxy HTTP mungkin tertunda, bergantung pada penggunaan resource proxy. Jika merutekan traffic keluar HTTP menggunakan proxy diinginkan, pastikan Anda memperhitungkan skenario ini dengan menerapkan percobaan ulang, backoff eksponensial, atau pemutus arus.
Mengonfigurasi pengecualian proxy HTTP
Saat menggunakan proxy HTTP untuk merutekan traffic keluar layanan atau tugas Cloud Run, pastikan Anda menambahkan pengecualian untuk Cloud API, dan host dan subnet non-proxy lainnya untuk mencegah latensi, waktu tunggu koneksi habis, reset koneksi, dan error autentikasi.
Host dan subnet non-proxy harus menyertakan, minimal, hal berikut:
127.0.0.1
169.254.*
atau169.254.0.0/16
localhost
*.google.internal
*.googleapis.com
Secara opsional, host tanpa proxy dapat mencakup:
*.appspot.com
*.run.app
*.cloudfunctions.net
*.gateway.dev
*.googleusercontent.com
*.pkg.dev
*.gcr.io
Cara umum untuk mengonfigurasi pengecualian proxy HTTP untuk jaringan keluar meliputi hal berikut:
- Variabel lingkungan:
NO_PROXY
atauno_proxy
. Flag Java Virtual Machine
http.nonProxyHosts
.- Properti sistem
https.nonProxyHosts
tidak ditentukan, sehinggahttp.nonProxyHosts
berlaku untuk HTTP dan HTTPS. - Properti sistem
http.nonProxyHosts
tidak mendukung notasi CIDR, jadi Anda harus menggunakan ekspresi pencocokan pola.
- Properti sistem
Tanda tangan token identitas disamarkan oleh Google
Error berikut terjadi selama inferensi:
SIGNATURE_REMOVED_BY_GOOGLE
Hal ini dapat terjadi selama pengembangan dan pengujian dalam kondisi berikut:
- Pengguna login menggunakan Google Cloud CLI atau Cloud Shell.
- Pengguna membuat token ID menggunakan perintah
gcloud
. - Pengguna mencoba menggunakan token ID untuk memanggil layanan Cloud Run non-publik.
Hal ini sesuai dengan desain. Google menghapus tanda tangan token karena masalah keamanan agar layanan Cloud Run non-publik tidak memutar ulang token ID yang dibuat dengan cara ini.
Untuk mengatasi masalah ini, panggil layanan pribadi Anda dengan token ID baru. Lihat pengujian autentikasi pada layanan Anda untuk mengetahui informasi selengkapnya.
Peringatan OpenBLAS dalam log
Jika menggunakan library berbasis OpenBLAS seperti NumPy dengan lingkungan eksekusi generasi pertama, Anda mungkin akan menjumpai peringatan berikut di log:
OpenBLAS WARNING - could not determine the L2 cache size on this system,
assuming 256k
Ini hanyalah peringatan dan tidak akan memengaruhi layanan Anda. Peringatan ini muncul karena sandbox container yang digunakan oleh lingkungan eksekusi generasi pertama tidak menampilkan fitur hardware level rendah. Anda dapat memilih beralih ke lingkungan eksekusi generasi kedua jika tidak ingin melihat peringatan ini di log Anda.
Spark gagal saat mendapatkan alamat IP komputer yang akan diikat
Salah satu error berikut terjadi selama inferensi:
assertion failed: Expected hostname (not IP) but got <IPv6 ADDRESS>
assertion failed: Expected hostname or IPv6 IP enclosed in [] but got <IPv6 ADDRESS>
Untuk menyelesaikan masalah ini:
Untuk mengubah nilai variabel lingkungan dan menyelesaikan masalah, tetapkan ENV
SPARK_LOCAL_IP="127.0.0.1"
di Dockerfile Anda. Di Cloud Run, jika
variabel
SPARK_LOCAL_IP
tidak ditetapkan, variabel tersebut akan ditetapkan secara default ke pasangan IPv6, bukan ke localhost. Perlu
diketahui bahwa setelan RUN export SPARK_LOCAL_IP="127.0.0.1"
tidak akan tersedia di
runtime dan Spark akan berfungsi seolah-olah tidak ditetapkan.
Memetakan Domain Kustom
Status penyediaan sertifikat domain kustom macet
Salah satu error berikut terjadi saat Anda mencoba memetakan domain kustom:
The domain is available over HTTP. Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin and to accept HTTP traffic.
Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin.
Untuk menyelesaikan masalah ini:
- Tunggu setidaknya 24 jam. Penyediaan sertifikat SSL biasanya memerlukan waktu sekitar 15 menit, tetapi dapat juga memakan waktu hingga 24 jam.
Pastikan Anda telah memperbarui data DNS dengan benar di registrar domain menggunakan alat dig Toolbox Google Admin
Data DNS di registrar domain Anda harus cocok dengan yang diminta untuk ditambahkan oleh Konsol Google Cloud.
Pastikan root domain diverifikasi dalam akun Anda menggunakan salah satu metode berikut:
- Ikuti petunjuk untuk menambahkan pemilik domain terverifikasi dan pastikan akun Anda tercantum sebagai Pemilik Terverifikasi.
- Gunakan Search Console.
Pastikan bahwa masa berlaku sertifikat untuk domain belum habis. Untuk menemukan batas masa berlaku, gunakan perintah berikut:
echo | openssl s_client -servername 'ROOT_DOMAIN' -connect 'ROOT_DOMAIN:443' 2>/dev/null | openssl x509 -startdate -enddate -noout
Admin API
Fitur ini tidak didukung pada tahap peluncuran yang dinyatakan
Error berikut terjadi saat Anda memanggil Cloud Run Admin API:
The feature is not supported in the declared launch stage
Error ini terjadi saat Anda memanggil Cloud Run Admin API secara langsung dan menggunakan fitur beta tanpa menentukan anotasi atau kolom tahap peluncuran.
Untuk mengatasi masalah ini, tambahkan kolom tahap peluncuran ke permintaan. Berikut adalah contoh untuk REST API v1 dan REST API v2:
Contoh berikut menambahkan anotasi tahap peluncuran ke permintaan klien menggunakan JSON dan REST API v1:
"annotations": { "run.googleapis.com/launch-stage": "BETA" }
Contoh berikut menambahkan referensi LaunchStage ke permintaan klien menggunakan JSON dan REST API v2:
"launchStage": "BETA"
Contoh berikut menambahkan anotasi tahap peluncuran ke permintaan layanan menggunakan YAML dan REST API v1:
kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA
Pemutusan koneksi klien tidak diterapkan ke Cloud Run
Saat Anda menggunakan HTTP/1.1 di Cloud Run, peristiwa pemutusan koneksi klien tidak disebarkan ke penampung Cloud Run.
Solusinya adalah menggunakan Websocket atau HTTP/2.0, yang menyebarkan pemutusan koneksi klien.
Memecahkan masalah network file system
Pelajari lebih lanjut cara Menggunakan network file system.
Tidak dapat mengakses file menggunakan NFS
Error | Solusi yang disarankan |
---|---|
mount.nfs: Protocol not supported |
Beberapa image dasar, misalnya debian dan adoptopenjdk/openjdk11 , tidak memiliki dependensi nfs-kernel-server. |
mount.nfs: Connection timed out |
Jika waktu tunggu koneksi habis, pastikan Anda memberikan alamat IP yang benar untuk instance filestore. |
mount.nfs: access denied by server while mounting IP_ADDRESS:/FILESHARE |
Jika akses ditolak oleh server, periksa dan pastikan nama file yang dibagikan sudah benar. |
Tidak dapat mengakses file menggunakan Cloud Storage FUSE
Lihat panduan pemecahan masalah Cloud Storage FUSE.