Memantau performa pipeline menggunakan Cloud Profiler

Cloud Profiler adalah profiler statistik dengan overhead rendah yang terus-menerus mengumpulkan informasi penggunaan CPU dan alokasi memori dari aplikasi produksi Anda. Untuk mengetahui detail selengkapnya, lihat Konsep pembuatan profil. Untuk memecahkan masalah atau memantau performa pipeline, gunakan integrasi Dataflow dengan Cloud Profiler untuk mengidentifikasi bagian kode pipeline yang menghabiskan paling banyak resource.

Untuk tips pemecahan masalah dan strategi proses debug dalam mem-build atau menjalankan pipeline Dataflow, lihat Memecahkan masalah dan proses debug pipeline.

Sebelum memulai

Pahami konsep pembuatan profil dan biasakan diri Anda dengan antarmuka Profiler. Untuk mengetahui informasi tentang cara memulai antarmuka Profiler, lihat Memilih profil yang akan dianalisis.

Cloud Profiler API harus diaktifkan untuk project Anda sebelum tugas dimulai. Fitur ini diaktifkan secara otomatis saat Anda pertama kali mengunjungi halaman Profiler. Atau, Anda dapat mengaktifkan Cloud Profiler API menggunakan alat command line gcloud Google Cloud CLI atau Konsol Google Cloud.

Untuk menggunakan Cloud Profiler, project Anda harus memiliki kuota yang cukup. Selain itu, akun layanan pekerja untuk tugas Dataflow harus memiliki izin yang sesuai untuk Profiler. Misalnya, untuk membuat profil, akun layanan pekerja harus memiliki izin cloudprofiler.profiles.create, yang disertakan dalam peran IAM Agen Cloud Profiler (roles/cloudprofiler.agent). Untuk mengetahui informasi selengkapnya, lihat Kontrol akses dengan IAM.

Mengaktifkan Cloud Profiler untuk pipeline Dataflow

Cloud Profiler tersedia untuk pipeline Dataflow yang ditulis di Apache Beam SDK untuk Java dan Python, versi 2.33.0 atau yang lebih baru. Pipeline Python harus menggunakan Dataflow Runner v2. Cloud Profiler dapat diaktifkan pada waktu mulai pipeline. Overhead CPU dan memori yang diamortisasi diperkirakan kurang dari 1% untuk pipeline Anda.

Java

Untuk mengaktifkan profiling CPU, mulai pipeline dengan opsi berikut.

--dataflowServiceOptions=enable_google_cloud_profiler

Untuk mengaktifkan pembuatan profil heap, mulai pipeline dengan opsi berikut. Pembuatan profil heap memerlukan Java 11 atau yang lebih tinggi.

--dataflowServiceOptions=enable_google_cloud_profiler

--dataflowServiceOptions=enable_google_cloud_heap_sampling

Python

Untuk menggunakan Cloud Profiler, pipeline Python harus dijalankan dengan Dataflow Runner v2.

Untuk mengaktifkan profiling CPU, mulai pipeline dengan opsi berikut. Pembuatan profil heap belum didukung untuk Python.

--dataflow_service_options=enable_google_cloud_profiler

Go

Untuk mengaktifkan CPU dan pembuatan profil heap, mulai pipeline dengan opsi berikut.

--dataflow_service_options=enable_google_cloud_profiler

Jika Anda men-deploy pipeline dari template Dataflow dan ingin mengaktifkan Cloud Profiler, tentukan flag enable_google_cloud_profiler dan enable_google_cloud_heap_sampling sebagai eksperimen tambahan.

Konsol

Jika menggunakan template yang disediakan Google, Anda dapat menentukan tanda di halaman Create job from template Dataflow di kolom Additional experiment.

gcloud

Jika Anda menggunakan Google Cloud CLI untuk menjalankan template, gcloud dataflow jobs run atau gcloud dataflow flex-template run, bergantung pada jenis template, gunakan opsi --additional- experiments untuk menentukan flag.

API

Jika Anda menggunakan REST API untuk menjalankan template, bergantung pada jenis template, tentukan flag menggunakan kolom additionalExperiments di lingkungan runtime, baik RuntimeEnvironment maupun FlexTemplateRuntimeEnvironment.

Melihat data pembuatan profil

Jika Cloud Profiler diaktifkan, link ke halaman Profiler akan ditampilkan di halaman tugas.

Halaman Tugas dengan link ke halaman Profiler.

Di halaman Profiler, Anda juga dapat menemukan data pembuatan profil untuk pipeline Dataflow. Service adalah nama tugas Anda, dan Version adalah ID tugas Anda.

Menampilkan nilai Layanan dan Versi untuk pembuatan profil tugas Dataflow.

Menggunakan Cloud Profiler

Halaman Profiler berisi flame graph yang menampilkan statistik untuk setiap frame yang berjalan pada pekerja. Pada arah horizontal, Anda dapat melihat berapa lama waktu yang dibutuhkan setiap frame untuk mengeksekusi waktu CPU. Secara vertikal, Anda dapat melihat pelacakan tumpukan dan kode yang berjalan secara paralel. Pelacakan tumpukan didominasi oleh kode infrastruktur runner. Untuk tujuan proses debug, kita biasanya ingin menggunakan eksekusi kode pengguna, yang biasanya ditemukan di dekat ujung bawah grafik. Kode pengguna dapat diidentifikasi dengan mencari frame penanda, yang mewakili kode runner yang diketahui hanya memanggil kode pengguna. Dalam kasus runner Beam ParDo, lapisan adaptor dinamis dibuat untuk memanggil tanda tangan metode DoFn yang disediakan pengguna. Lapisan ini dapat diidentifikasi sebagai frame dengan akhiran invokeProcessElement. Gambar berikut menunjukkan demonstrasi menemukan frame penanda.

Contoh grafik flame Profiler yang menampilkan frame penanda.

Setelah mengklik frame penanda yang menarik, grafik flame berfokus pada pelacakan tumpukan tersebut, sehingga memberikan gambaran yang baik tentang kode pengguna yang berjalan lama. Operasi paling lambat dapat menunjukkan lokasi terjadinya bottleneck dan menghadirkan peluang untuk pengoptimalan. Pada contoh berikut, Anda dapat melihat bahwa Jendela Global sedang digunakan dengan ByteArrayCoder. Dalam hal ini, pembuat kode mungkin area yang baik untuk optimalisasi karena memakan waktu CPU yang signifikan dibandingkan dengan operasi ArrayList dan HashMap.

Contoh pelacakan tumpukan frame penanda yang menunjukkan operasi yang berjalan paling lambat.

Memecahkan Masalah Cloud Profiler

Jika Anda mengaktifkan Cloud Profiler dan pipeline Anda tidak membuat data pembuatan profil, salah satu kondisi berikut mungkin menjadi penyebabnya.

  • Pipeline Anda menggunakan Apache Beam SDK versi lama. Untuk menggunakan Cloud Profiler, Anda harus menggunakan Apache Beam SDK versi 2.33.0 atau yang lebih baru. Anda dapat melihat versi Apache Beam SDK pipeline Anda di halaman tugas. Jika tugas Anda dibuat dari template Dataflow, template tersebut harus menggunakan versi SDK yang didukung.

  • Kuota Cloud Profiler hampir habis untuk project Anda. Anda dapat melihat penggunaan kuota dari halaman kuota project Anda. Error seperti Failed to collect and upload profile whose profile type is WALL dapat terjadi jika kuota Cloud Profiler terlampaui. Layanan Cloud Profiler akan menolak data pembuatan profil jika Anda telah mencapai kuota. Untuk mengetahui informasi selengkapnya tentang kuota Cloud Profiler, lihat Kuota dan Batas.

Agen Cloud Profiler diinstal selama startup pekerja Dataflow. Pesan log yang dibuat oleh Cloud Profiler tersedia dalam jenis log dataflow.googleapis.com/worker-startup.

Halaman yang menampilkan log Cloud Profiler dengan menu terbuka yang menandai jalur navigasi: dataflow.googleapis.com/worker-startup.

Terkadang, data profiling ada, tetapi Cloud Profiler tidak menampilkan output apa pun. Profiler akan menampilkan pesan yang mirip dengan, There were profiles collected for the specified time range, but none match the current filters.

Untuk mengatasi masalah ini, coba ikuti langkah-langkah pemecahan masalah berikut.

  • Pastikan rentang waktu dan waktu berakhir di Profiler mencakup waktu berlalu tugas.

  • Pastikan bahwa tugas yang benar telah dipilih di Profiler. Service adalah nama tugas Anda.

  • Pastikan opsi pipeline job_name memiliki nilai yang sama dengan nama tugas di halaman tugas Dataflow.

  • Jika Anda menentukan argumen nama layanan saat memuat agen Profiler, konfirmasi bahwa nama layanan telah dikonfigurasi dengan benar.