Memecahkan masalah

Halaman ini menunjukkan cara menyelesaikan masalah terkait Cloud Profiler.

Error pada konfigurasi project Google Cloud Anda

Bagian ini mencantumkan masalah konfigurasi yang mungkin Anda alami dan memberikan saran tentang cara memperbaiki masalah tersebut.

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:

  1. Enable the required API.

    Enable the API

  2. Jika API enabled ditampilkan, berarti API sudah diaktifkan. Jika belum, klik tombol Enable.

Pemanggil tidak memiliki izin

Error berikut terjadi jika 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 mengetahui daftar mendetail tentang 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 masalah tersebut.

Aplikasi tidak keluar secara normal dengan Node.js

Agen pembuatan profil untuk Node.js mengganggu keluarnya program secara normal; program dapat memerlukan waktu hingga satu jam untuk keluar 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.

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 saat argumen fungsi tidak valid, saat informasi yang diperlukan tidak dapat ditentukan dari variabel dan argumen lingkungan, atau saat pembuatan profil waktu CPU dan waktu Wall 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 pembuatan profil Wall diaktifkan, pastikan start dipanggil dari thread utama.
  • Pastikan Anda menggunakan versi Python yang didukung dan profiling waktu CPU atau waktu Wall diaktifkan. Untuk informasi selengkapnya, lihat fungsi start.
  • Pastikan Anda telah menentukan parameter project_id ke start jika Anda menjalankannya di luar Google Cloud. Untuk mengetahui informasi selengkapnya, lihat fungsi start.

Error resource tidak tersedia untuk sementara 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 deskripsi file wakeup sinyal, signal.set_wakeup_fd. Secara default, jika buffer deskripsi file terisi, peringatan akan dicatat ke stderr.

Saat mengumpulkan profil, Cloud Profiler akan 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 ke signal.set_wakeup_fd.

  • Jika aplikasi Anda tidak dapat berjalan dengan aman saat sinyal hilang, sebaiknya hentikan penggunaan Cloud Profiler. Penggunaan yang terus-menerus dapat menyebabkan hilangnya nomor sinyal dan entri yang berlebihan dalam log error.

Semua profil tidak ada

Ada dua alasan umum mengapa Anda mungkin tidak melihat profil apa pun:

  • Layanan tidak berjalan cukup lama untuk mengumpulkan profil.
  • Layanan tidak dikonfigurasi untuk autentikasi.

Untuk mengatasi masalah terkait waktu proses yang singkat, pastikan layanan Anda berjalan secara terus-menerus selama minimal 3 menit.

Untuk mengatasi masalah terkait autentikasi, pastikan agen pembuatan profil dapat menulis data ke project Google Cloud Anda:

  • Jika layanan Anda berjalan di Google Cloud, autentikasi akan dilakukan secara otomatis, kecuali saat Anda men-deploy penampung di Compute Engine. Saat men-deploy penampung di Compute Engine, Anda harus menentukan project ID Google Cloud dalam perintah start agen Profiler. Untuk petunjuknya, lihat Menautkan agen ke project Google Cloud.

  • Jika layanan Anda berjalan di luar Google Cloud, Anda harus membuat akun layanan dan menautkan agen Profiler ke project Google Cloud Anda. Untuk mengetahui informasi selengkapnya, lihat Membuat profil aplikasi yang berjalan di luar Google Cloud.

Profil jenis tertentu tidak ada

Bagian ini mencantumkan konfigurasi tertentu tempat 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 dengan jenis tersebut yang tersedia, periksa hal berikut:

Bagian lain di halaman ini menjelaskan konfigurasi khusus bahasa tempat data untuk satu jenis profil tidak dikumpulkan.

Go: Profil waktu CPU tidak dikumpulkan untuk c-archives

Saat aplikasi Go di-build dengan flag -buildmode yang ditetapkan ke c-archive atau c-shared, pembuatan profil waktu CPU 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 Anda 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 tidak memiliki profil.

Pengambil sampel heap Java diaktifkan sebagai kemampuan agen tunggal. Efeknya adalah hanya satu profiler yang dapat digunakan dalam satu waktu. Bug telah dibuka untuk memperluas Java guna mendukung beberapa profiler Heap. Untuk informasi tentang bug tersebut, lihat Menambahkan dukungan multi-agen untuk mekanisme Sampling Heap.

Untuk mengatasi masalah ini, aktifkan satu profiler.

Python: Tidak ada waktu CPU dan tidak ada profil Wall saat menggunakan uWSGI

Saat uWSGI menggunakan beberapa pekerja untuk menangani permintaan, perilaku default-nya adalah melakukan inisialisasi aplikasi hanya dalam proses utama (master). Proses yang di-fork tidak melakukan urutan inisialisasi.

Jika Anda mengonfigurasi agen pembuatan profil dalam urutan inisialisasi aplikasi—misalnya, Anda mengonfigurasi agen pembuatan profil dalam metode AppConfig.ready() aplikasi Django—maka agen pembuatan profil tidak dikonfigurasi untuk proses yang di-fork.

Untuk mengatasi masalah ini, lakukan inisialisasi aplikasi di semua proses pekerja dengan menetapkan flag lazy-apps ke true.

Python: Memiliki profil waktu CPU, tetapi tidak memiliki profil Wall 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 yang di-fork.

Untuk mengatasi masalah ini, untuk aplikasi uWSGI, aktifkan penanganan sinyal kustom dengan menetapkan tanda py-call-osafterfork ke true.

Python: Tidak ada profil untuk proses yang di-fork

Agen pembuatan profil hanya dapat membuat profil proses yang memulai agen.

Untuk mengatasi masalah ini, jika aplikasi Anda melakukan fork proses dan jika Anda ingin mengumpulkan profil dari proses yang di-fork, lakukan inisialisasi agen setelah melakukan fork.