Grafik flame
Cloud Profiler menampilkan data pembuatan profil menggunakan Flame Graph. Tidak seperti hierarki dan grafik, grafik api menggunakan ruang layar secara efisien dengan merepresentasikan informasi dalam jumlah besar dalam format yang ringkas dan mudah dibaca.
Untuk memperkenalkan flame graph, halaman ini mengilustrasikan cara mengonversi hierarki menjadi flame graph dan meringkas fitur utama flame graph.
Membuat grafik api
Untuk membuat grafik api dari hierarki, selesaikan langkah-langkah yang diilustrasikan dalam diagram berikut:
Hapus panah yang menunjukkan panggilan fungsi dari hierarki.
Ganti setiap node hierarki dengan frame.
Bingkai berbentuk persegi panjang dan semua bingkai memiliki tinggi yang sama. Untuk contoh di halaman ini, total waktu CPU yang digunakan oleh fungsi yang bernama dalam frame menentukan lebar frame.
Kode pseudo untuk setiap fungsi dijelaskan dalam tabel berikut. Pekerjaan intensif CPU yang dilakukan selama eksekusi fungsi menentukan waktu CPU mandiri:
Kode semu fungsi waktu CPU mandiri
(detik)total waktu CPU
(detik)func main(): foo1() foo2() // CPU intensive work // for 2 seconds
2 4 + 3 + 2 = 9 func foo1(): bar() // CPU intensive work // for 1.5 seconds
1,5 2,5 + 1,5 = 4 func foo2(): bar() // CPU intensive work // for 0.5 seconds
0,5 2,5 + 0,5 = 3 func bar(): // CPU intensive work // for 2.5 seconds
2,5 2,5 Langkah berikutnya adalah menghapus spasi vertikal di antara frame dan frame rata kiri sambil mempertahankan urutan panggilan. Secara opsional, Anda dapat menentukan skema warna dan mewarnai frame sesuai dengan definisi. Misalnya, Anda dapat mewarnai frame berdasarkan paketnya, berdasarkan total waktu CPU, berdasarkan waktu CPU mandiri, atau berdasarkan ukuran yang berbeda.
Setelah menghapus spasi kosong yang berlebihan dan mewarnai frame berdasarkan waktu CPU mandiri, grafik api kini muncul sebagai berikut:
Perhatikan bahwa stack panggilan untuk
foo1
danfoo2
telah dipertahankan, meskipun stack panggilan yang dimulai denganfoo2
sekarang berada di samping frame untukfoo1
.
Ringkasan
Contoh sederhana ini mengilustrasikan hal berikut:
- Diagram api adalah representasi ringkas dari hierarki dan Anda dapat membuat ulang stack panggilan dengan melacak frame dari atas ke bawah.
- Frame memberi nama fungsi dan lebar frame adalah pengukuran relatif
dari total waktu CPU fungsi tersebut.
Dalam contoh ini, karena total waktu CPU
foo2
adalah sepertiga dari total waktu CPUmain
, frame untukfoo2
adalah sepertiga lebar frame untukmain
. - Lebar ruang kosong di bawah frame adalah pengukuran relatif dari
waktu CPU mandiri untuk fungsi yang dinamai dalam frame.
Misalnya, di bawah frame
foo1
, 1,5 unit kosong dan 2,5 unit diisi olehbar
. Oleh karena itu, waktu CPU mandirifoo1
adalah 37,5% dari total waktu CPU-nya, atau 1,5 s. Saat Anda mengikuti stack panggilan, lebar frame akan berkurang karena total waktu CPU pemanggil tidak boleh lebih dari total waktu CPU pemanggil. Perilaku ini yang menyebabkan bentuk api.
Dalam contoh,
foo1
memanggilbar
dan total waktu CPUfoo1
ditentukan sebagai total waktu CPUbar
ditambah waktu CPU mandirifoo1
. Oleh karena itu, total waktu CPUbar
tidak boleh lebih dari total waktu CPUfoo1
.
Langkah selanjutnya
- Memilih profil yang akan dianalisis
- Berinteraksi dengan flame graph
- Memfilter grafik flame
- Memfokuskan flame graph
- Membandingkan profil