Topik ini menjelaskan penyebab dan solusi untuk kesalahan "Invocation canceled by client".
Deskripsi masalah
Pesan kesalahan berikut dilaporkan dalam log permintaan ketika sebuah fungsi dipanggil dari klien untuk memproses permintaan:
FC Invoke End RequestId: 1-64263a4b-2cd7c98b677*********, Error: Invocation canceled by client (durasi: 4912ms, maxMemoryUsage: 0,00MB)Penyebab yang mungkin
Klien yang memulai pemanggilan membatalkan permintaan. Akibatnya, eksekusi fungsi terganggu dan kesalahan dilaporkan.
Solusi
Ikuti langkah-langkah berikut untuk menyelesaikan masalah:
Periksa durasi eksekusi fungsi saat klien membatalkan permintaan berdasarkan kesalahan yang dikembalikan.
Dalam contoh ini,
durasi: 4912msmenunjukkan bahwa fungsi berjalan selama sekitar 5 detik.Tentukan apakah waktu eksekusi sesuai dengan harapan Anda berdasarkan kebutuhan bisnis Anda.
Jika durasi eksekusi sesuai dengan harapan Anda, perpanjang periode timeout klien. Untuk informasi lebih lanjut, lihat bagian "Durasi Eksekusi Sesuai Harapan" dari topik Apa yang harus saya lakukan jika klien terputus dan muncul pesan "Invocation canceled by client"?.
Jika durasi eksekusi tidak sesuai dengan harapan Anda, periksa logika eksekusi fungsi berdasarkan log untuk mengidentifikasi logika yang meningkatkan durasi eksekusi. Untuk informasi lebih lanjut, lihat bagian "Durasi Eksekusi Tidak Sesuai Harapan" dari topik Apa yang harus saya lakukan jika klien terputus dan muncul pesan "Invocation canceled by client"?.
Durasi eksekusi sesuai harapan
Jika Anda memanggil fungsi menggunakan SDK atau Operasi API, kami sarankan Anda menetapkan periode timeout permintaan ke nilai yang lebih besar dari periode timeout yang dikonfigurasikan untuk fungsi tersebut.
Sebagai contoh, jika Anda menggunakan bahasa Golang dan memanggil fungsi menggunakan API Function Compute, Anda dapat mengonfigurasi periode timeout permintaan menggunakan properti Timeout di http.Client. Jika context.Context digunakan saat Anda memulai permintaan, Anda dapat menyesuaikan batas waktu atau periode timeout konteks tersebut.
Jika Anda memanggil fungsi menggunakan layanan lain, Anda dapat memodifikasi periode timeout backend layanan tersebut di konsol Function Compute.
Sebagai contoh, jika Anda menggunakan operasi API untuk memanggil fungsi di frontend, Anda dapat memodifikasi pengaturan timeout backend operasi API di konsol API Gateway. Untuk informasi lebih lanjut, lihat Buat API.
Jika Anda memanggil fungsi di konsol Function Compute, jangan klik Cancel Request untuk membatalkan permintaan atau menutup halaman web sebelum fungsi dieksekusi.
Durasi eksekusi tidak sesuai harapan
Dalam banyak kasus, durasi eksekusi program ditentukan oleh operasi berikut:
Operasi I/O
Operasi I/O, terutama operasi I/O jaringan, merupakan penyebab utama peningkatan latensi eksekusi. Kami sarankan Anda menambahkan log sebelum dan sesudah mengakses layanan eksternal untuk memeriksa apakah waktu yang dibutuhkan untuk mengakses layanan eksternal normal.
Operasi Komputasi
Sejumlah besar operasi komputasi juga dapat meningkatkan latensi. Kami sarankan Anda meningkatkan spesifikasi CPU.