Realtime Compute for Apache Flink menyediakan alat profiling bawaan yang membantu Anda mendiagnosis hambatan kinerja pada penerapan yang sedang berjalan di tingkat JVM. Gunakan flame graph untuk mengidentifikasi hot spot CPU, periksa alokasi memori di seluruh ruang JVM, dan analisis perilaku thread melalui pengambilan sampel dan thread dump.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Izin tingkat namespace untuk Realtime Compute for Apache Flink yang diberikan ke Akun Alibaba Cloud atau pengguna Resource Access Management (RAM) Anda. Untuk detailnya, lihat Berikan izin namespace.
Batasan
Hanya Ververica Runtime (VVR) versi 4.0.11 atau lebih baru yang mendukung pemantauan kinerja penerapan.
Data kinerja hanya tersedia untuk penerapan yang sedang berjalan. Data penerapan historis tidak disimpan.
Pilih tool
Mulailah dengan alat yang sesuai dengan gejala yang sedang Anda selidiki.
| Gejala | Tool | Yang ditampilkan |
|---|---|---|
| Penggunaan CPU tinggi atau throughput lambat | Flame Graph | Metode yang intensif CPU dan tumpukan panggilannya |
| Dugaan tekanan memori | Flame Graph (mode Alloc) atau Memory | Alokasi memori berdasarkan fungsi, atau penggunaan memori JVM berdasarkan ruang |
| Kontensi thread atau dugaan deadlock | Flame Graph (mode Lock) atau Threads | Pola kontensi lock, atau jejak stack per thread melalui pengambilan sampel |
| Perlu snapshot lengkap dari semua status thread | Thread Dump | Semua stack thread pada satu titik waktu |
Flame Graph
Flame graph memvisualisasikan tumpukan panggilan sebagai batang horizontal berlapis. Setiap batang merepresentasikan sebuah frame stack: lapisan paling bawah adalah titik masuk aplikasi, dan lapisan yang lebih atas merepresentasikan panggilan fungsi yang lebih dalam. Batang yang lebih lebar menunjukkan waktu CPU yang lebih banyak dikonsumsi oleh fungsi tersebut, sehingga menjadi indikator utama hambatan kinerja.
Untuk latar belakang konsep flame graph, lihat Flame Graphs dalam dokumentasi Apache Flink.
Mode flame graph
| Mode | Yang ditangkap |
|---|---|
| CPU | Jejak stack dari thread yang sedang aktif berjalan. Frame yang lebih lebar menunjukkan penggunaan CPU yang lebih tinggi. |
| Alloc | Memori yang dialokasikan oleh setiap fungsi. Mengidentifikasi fungsi yang memberikan tekanan heap paling besar. |
| Lock | Kontensi lock dan pola deadlock. Menyoroti fungsi yang menunggu untuk mendapatkan lock. |
| ITimer | Konsumsi CPU di seluruh thread dalam interval pengambilan sampel. Mirip dengan mode CPU tetapi tidak memerlukan dukungan perf_events. |
Identifikasi hambatan kinerja dengan flame graph

Cari frame yang lebar. Frame yang lebar berarti fungsi terkait mengonsumsi bagian signifikan dari waktu CPU dibandingkan fungsi lain. Ini merupakan indikator paling umum dari hot spot.
Periksa frekuensi frame. Frame stack yang muncul berulang kali di berbagai sampel menunjukkan fungsi yang sering dipanggil, yang dapat menyebabkan degradasi kinerja kumulatif.
Interpretasikan posisi vertikal. Frame lebar di dekat bagian bawah grafik menunjukkan adanya masalah di jalur utama aplikasi atau kode titik masuk. Frame lebar di dekat bagian atas menunjukkan adanya masalah dalam fungsi tertentu yang berada jauh di dalam tumpukan panggilan.
Optimalkan hot spot tersebut. Setelah mengidentifikasi fungsi bermasalah, tinjau kode terkait. Optimasi umum mencakup pengurangan iterasi loop, peningkatan struktur data, dan minimalisasi operasi sinkronisasi.
Bandingkan sebelum dan sesudah. Setelah menerapkan optimasi, hasilkan flame graph baru dan bandingkan dengan flame graph sebelumnya untuk memverifikasi bahwa hambatan telah terselesaikan.
Flame graph dihasilkan dari data sampel dan mungkin tidak menangkap konteks eksekusi secara lengkap. Untuk diagnosis yang lebih akurat, gunakan flame graph bersama alat kinerja lain yang dijelaskan dalam topik ini. Fungsi non-Java muncul sebagai "unknown" dalam flame graph. Untuk detailnya, lihat diskusi async-profiler.
Memory
Tab Memory menampilkan penggunaan memori di berbagai ruang JVM (heap, non-heap, metaspace, dan lainnya). Gunakan tampilan ini untuk mengidentifikasi kebocoran memori, pengumpulan sampah berlebihan, atau ruang JVM yang mendekati batasnya.
Threads
Pengambilan sampel thread menangkap jejak stack dari thread individual dalam rentang waktu tertentu, membantu Anda memahami apa yang dilakukan setiap thread selama terjadi masalah kinerja.
Ambil sampel thread
Akses tab Debug untuk komponen yang ingin diperiksa:
JobManager: Di tab Logs, klik tab Job Manager, lalu klik Debug.
TaskManager: Di tab Logs, klik tab Running Task Managers, klik nilai di kolom Path, ID, lalu klik Debug.
Di tab Threads, temukan operator yang ingin diperiksa dan klik Sample di kolom Actions. Tunggu hingga proses pengambilan sampel selesai, lalu tinjau stack thread.

Contoh ini menunjukkan stack thread yang diakses oleh Gemini State.
Thread Dump
Thread dump menangkap status setiap thread pada satu titik waktu. Gunakan thread dump untuk mendeteksi deadlock, mengidentifikasi thread yang terblokir, atau memverifikasi interaksi backend status.
Ambil thread dump
Di tab Logs, klik tab Running Task Managers, lalu klik nilai di kolom Path, ID.
Klik tab Thread Dump.
Cari nama operator yang memproses data status. Periksa apakah stack thread yang berisi interaksi GeminiStateBackend atau RocksDBStateBackend ditampilkan di bawah operator tersebut.

Temukan nama operator di tab Status.

Referensi
Lakukan diagnostik penerapan cerdas: Pantau kesehatan penerapan dan identifikasi masalah stabilitas secara otomatis.
Optimalkan Flink SQL: Tingkatkan kinerja penerapan melalui penyetelan konfigurasi dan optimasi Flink SQL.