Memecahkan masalah
Halaman ini menunjukkan cara menyelesaikan masalah pada Cloud Profiler.
Terjadi error pada konfigurasi project Google Cloud Anda
Bagian ini mencantumkan masalah konfigurasi yang mungkin Anda alami dan memberikan saran tentang cara memperbaikinya.
Cloud Profiler API dinonaktifkan
Error berikut terjadi saat Profiler API tidak diaktifkan untuk project Google Cloud Anda:
failed to create a profile, will retry: rpc error: code = PermissionDenied desc = Cloud Profiler API has not been used in project 012345 before or it is disabled.
Untuk mengatasi masalah ini, project Google Cloud Anda harus mengaktifkan Profiler API:
-
Pada panel navigasi Google Cloud Console, pilih APIs & Services, klik Enable APIs and Services, lalu aktifkan Cloud Profiler API:
Jika API diaktifkan ditampilkan, berarti API sudah diaktifkan. Jika belum, klik tombol Enable.
Penelepon tidak memiliki izin
Error berikut terjadi ketika Anda tidak memiliki izin untuk menulis data pembuatan profil ke project Google Cloud:
failed to create a profile, will retry: rpc error: code = PermissionDenied desc = The caller does not have permission.
Untuk mengatasi masalah ini, minta administrator untuk memberi Anda izin tambahan di project tersebut. Untuk daftar mendetail yang berisi izin dan peran yang diperlukan, lihat Kontrol akses.
Error dengan Node.js
Bagian ini mencantumkan masalah yang mungkin Anda alami saat menggunakan agen pembuatan profil Node.js dan memberikan saran tentang cara memperbaiki setiap masalah tersebut.
Aplikasi tidak keluar secara normal dengan Node.js
Agen pembuatan profil untuk Node.js mengganggu keluar normal dari program. Perlu waktu hingga satu jam untuk keluar dari program setelah semua tugas dalam program selesai.
Untuk mengatasi masalah ini,
keluarkan sinyal SIGINT
, misalnya dengan menggunakan Ctrl-C
. Saat Anda mengeluarkan
sinyal SIGINT
, proses akan dihentikan dengan baik.
Error dengan Python
Bagian ini mencantumkan masalah yang mungkin Anda alami saat menggunakan agen pembuatan profil Python dan memberikan saran tentang cara memperbaiki setiap masalah tersebut.
Pengecualian NotImplementedError
dengan Python
Pengecualian berikut ditampilkan selama eksekusi fungsi start
saat aplikasi dijalankan di lingkungan non-Linux:
NotImplementedError
Untuk mengatasi masalah ini, jalankan aplikasi Anda di lingkungan Linux.
Pengecualian ValueError
dengan Python
Pengecualian berikut ditampilkan selama start
jika argumen fungsi tidak valid, jika informasi yang diperlukan tidak dapat ditentukan dari variabel dan argumen lingkungan, atau jika waktu CPU dan pembuatan profil Waktu dinding dinonaktifkan:
ValueError
Untuk mengatasi masalah ini, periksa semua hal berikut:
- Pastikan nama dan versi layanan memenuhi persyaratan yang ditentukan dalam Argumen nama dan versi layanan.
- Jika Profil dinding diaktifkan, pastikan
start
dipanggil dari thread utama. - Pastikan Anda menggunakan versi Python yang didukung dan
bahwa pembuatan profil Waktu CPU atau Waktu dinding diaktifkan. Untuk mengetahui informasi
selengkapnya, lihat Fungsi
start
. - Pastikan Anda telah menentukan parameter
project_id
kestart
jika Anda menjalankannya di luar Google Cloud. Untuk mengetahui informasi selengkapnya, lihat Fungsistart
.
Error resource untuk sementara tidak tersedia dengan Python
Log error berisi entri berikut setelah mengaktifkan Profiler:
BlockingIOError: [Errno 11] Resource temporarily unavailable Exception ignored when trying to write to the signal wakeup fd
Pesan ini terjadi saat aplikasi mendaftar dengan deskriptor file
bangunan sinyal,
signal.set_wakeup_fd
.
Secara default, jika buffering deskriptor file terisi, peringatan akan
dicatat ke stderr.
Saat mengumpulkan profil, Cloud Profiler memicu sinyal dengan frekuensi tinggi dan dapat menyebabkan deskriptor file sinyal terisi. Untuk masalah GitHub, lihat BlockingIOError di App Engine.
Untuk menyelesaikan masalah ini, lakukan salah satu tindakan berikut:
Jika aplikasi Anda dapat berjalan dengan aman saat sinyal hilang, Anda dapat menggunakan Cloud Profiler. Jika Anda menggunakan Python 3.7 atau yang lebih baru dan ingin menonaktifkan pesan peringatan, teruskan
warn_on_full_buffer=False
sebagai parameter kesignal.set_wakeup_fd
.Jika aplikasi Anda tidak dapat dijalankan dengan aman saat sinyal hilang, sebaiknya Anda berhenti menggunakan Cloud Profiler. Penggunaan terus-menerus dapat menyebabkan hilangnya jumlah sinyal dan entri yang berlebihan di log error.
Semua profil tidak ada
Ada dua alasan umum mengapa Anda tidak dapat melihat profil apa pun:
- Layanan tidak berjalan cukup lama sehingga profil dapat dikumpulkan.
- Layanan tidak dikonfigurasi untuk autentikasi.
Untuk mengatasi masalah yang terkait dengan waktu proses yang singkat, pastikan layanan Anda berjalan secara terus-menerus minimal selama 3 menit.
Untuk menyelesaikan masalah terkait autentikasi, pastikan agen pembuatan profil dapat menulis data ke project Google Cloud Anda:
Jika layanan Anda berjalan di Google Cloud, autentikasi akan bersifat otomatis kecuali saat Anda men-deploy container di Compute Engine. Saat men-deploy container di Compute Engine, Anda harus menentukan project ID Google Cloud di perintah
start
agen Profiler. Untuk mengetahui petunjuknya, lihat Menautkan agen ke project Google Cloud.Jika layanan berjalan di luar Google Cloud, Anda harus membuat akun layanan dan menautkan agen Profiler ke project Google Cloud. Untuk informasi selengkapnya, lihat Pembuatan profil di luar Google Cloud.
Profil jenis tertentu tidak ada
Bagian ini mencantumkan konfigurasi tertentu jika profil untuk satu atau beberapa jenis profil tidak dikumpulkan. Bagian pertama berisi konten umum dan bagian lainnya mencantumkan masalah untuk bahasa tertentu.
Informasi umum
Jika Anda ingin melihat jenis profil tertentu, tetapi tidak ada profil dari jenis tersebut yang tersedia, periksa hal berikut:
Pastikan jenis profil didukung untuk bahasa aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat Jenis pembuatan profil yang tersedia.
Pastikan Anda menggunakan versi layanan baru setelah mengubah jenis profil yang dikumpulkan. Jika Anda tidak menentukan versi layanan baru, deployment yang ada akan digunakan dan agen pembuatan profil tidak dapat mentransfer data untuk jenis profil yang baru diaktifkan. Untuk informasi selengkapnya tentang deployment, lihat Koleksi profil.
Pastikan jenis profil diaktifkan. Beberapa jenis profil dinonaktifkan secara default. Untuk informasi lebih lanjut, lihat masing-masing halaman bahasa:
Bagian lainnya di halaman ini menjelaskan konfigurasi khusus bahasa tempat data untuk satu jenis profil tidak dikumpulkan.
Go: profil waktu CPU tidak dikumpulkan untuk c-archives
Jika aplikasi Go di-build dengan flag -buildmode
yang disetel
ke c-archive
atau c-shared
, pembuatan profil waktu CPU
akan dinonaktifkan secara default. Profil heap, pertentangan, dan thread dikumpulkan.
Untuk mengetahui informasi selengkapnya, lihat Masalah GitHub #993: profiler tidak mengumpulkan data CPU untuk kode Go dalam c-archive.
Untuk mengatasi masalah ini,
aktifkan pengumpulan profil waktu CPU sebelum layanan memanggil
profiler.Start
, dan tambahkan panggilan ke
signal.Notify(make(chan os.Signal), syscall.SIGPROF)
.
Untuk informasi selengkapnya tentang signal.Notify
, lihat
func Notify
.
Java: Profil heap tidak dikumpulkan saat beberapa profiler diaktifkan
Anda telah mengaktifkan beberapa profiler heap untuk aplikasi Java dan belum memiliki profil.
Java heap sampler diaktifkan sebagai kemampuan agen tersendiri. Akibatnya, hanya satu profiler yang dapat digunakan pada satu waktu. Bug telah dibuka untuk memperluas Java guna mendukung beberapa profiler Heap. Untuk mengetahui informasi tentang bug tersebut, baca Menambahkan dukungan multi-agen untuk mekanisme Sampling Heap.
Untuk mengatasi masalah ini, aktifkan satu profiler.
Python: Tidak ada waktu CPU dan tidak ada profil Dinding saat menggunakan uWSGI
Saat uWSGI menggunakan beberapa pekerja untuk menangani permintaan, perilaku default-nya adalah melakukan inisialisasi aplikasi hanya dalam proses utama (master
). Proses forked tidak melakukan
urutan inisialisasi.
Jika Anda mengonfigurasi agen pembuatan profil dalam urutan inisialisasi
aplikasi—misalnya, mengonfigurasi agen pembuatan profil dalam metode
AppConfig.ready()
aplikasi Django—maka
agen pembuatan profil tidak akan dikonfigurasi untuk proses yang bercabang.
Untuk mengatasi masalah ini,
lakukan inisialisasi aplikasi di semua proses pekerja dengan menyetel flag
aplikasi lambat
ke true
.
Python: Memiliki profil waktu CPU, tetapi tidak memiliki profil Dinding saat menggunakan uWSGI
Wall profiler bergantung pada modul sinyal Python. Saat penafsir Python dikompilasi dengan dukungan thread, konfigurasi default akan menonaktifkan penanganan sinyal kustom untuk proses forked.
Untuk mengatasi masalah ini,
untuk aplikasi uWSGI, aktifkan penanganan sinyal kustom dengan menetapkan flag
py-call-osafterfork
ke true
.
Python: Tidak ada profil untuk proses yang bercabang
Agen pembuatan profil hanya dapat membuat profil proses yang memulai agen.
Untuk mengatasi masalah ini, jika aplikasi Anda memproses fork dan Anda ingin mengumpulkan profil dari proses fork, lakukan inisialisasi agen setelah melakukan fork.