Java Flight Recorder
Pembuatan profil dengan overhead rendah.
Java Flight Recorder adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa itu JFR
Java Perekam Penerbangan (JFR) adalah mesin pembuatan profil dan pengumpulan peristiwa yang terintegrasi langsung ke dalam JVM.
Mesin ini merekam peristiwa waktu berjalan secara terperinci — sampel metode, alokasi, pengumpulan sampah, kunci, IO — ke dalam berkas biner .jfr, dengan beban tambahan yang sangat rendah. Fitur ini disertakan bersama JDK; tidak diperlukan agen tambahan.
Mengapa Beban Tambahan Rendah Penting
Alat pembuatan profil berbasis instrumentasi tradisional dapat memperlambat aplikasi hingga dua kali lipat atau lebih, sehingga mengubah pengukuran yang ingin Anda amati.
JFR dirancang untuk berjalan di produksi, biasanya dengan beban tambahan sekitar 1%. Artinya, Anda dapat membiarkannya aktif dan mengambil rekaman saat insiden nyata terjadi, bukan hanya di laboratorium.
Memulai Rekaman Saat Peluncuran
Aktifkan JFR dengan opsi JVM saat memulai aplikasi:
-XX:StartFlightRecording=duration=60s,filename=app.jfr
Fitur ini merekam peristiwa selama 60 detik, lalu menuliskannya ke app.jfr. Anda juga dapat memulai rekaman yang berjalan hingga JVM keluar.
Mengontrol dari Baris Perintah
Anda juga dapat memulai, menghentikan, dan menyimpan isi rekaman pada JVM yang sedang berjalan melalui perintah baris perintah berikut:
jcmd <pid> JFR.start name=rec settings=profilejcmd <pid> JFR.dump name=rec filename=out.jfrjcmd <pid> JFR.stop name=rec
Ini ideal untuk mengambil cuplikan dari proses yang sudah mengalami masalah.
Setelan: bawaan vs profil
JFR menyediakan dua konfigurasi bawaan:
- bawaan — beban tambahan minimal, aman untuk penggunaan produksi berkelanjutan.
- profil — pengambilan sampel yang lebih terperinci, biaya sedikit lebih tinggi, untuk penyelidikan terarah.
Pilih dengan settings=profile. Anda juga dapat menulis konfigurasi .jfc khusus untuk menyesuaikan peristiwa individual.
Hal yang Direkam JFR
JFR menangkap beragam peristiwa, termasuk:
- Sampel eksekusi (ke mana waktu CPU digunakan).
- Alokasi objek dan aktivitas TLAB.
- Jeda pengumpulan sampah.
- Persaingan kunci (
jdk.JavaMonitorWait). - Berkas dan IO soket, pemarkiran utas, serta pengecualian.
Setiap peristiwa memiliki cap waktu, durasi, dan jejak tumpukan.
Peristiwa Khusus
Anda dapat menentukan peristiwa JFR sendiri untuk mengukur waktu logika bisnis. Perluas jdk.jfr.Event, beri anotasi, lalu gunakan begin() / commit() di sekitar pekerjaan tersebut.
Bagian antarmuka pemrograman JFR ini dapat digunakan secara mandiri. Rekaman nyata tetap memerlukan opsi JVM, tetapi kelas peristiwa dapat dikompilasi dan dijalankan pada JDK apa pun.
import jdk.jfr.Event;
import jdk.jfr.Label;
public class Main {
@Label("Order Processing")
static class OrderEvent extends Event {
@Label("Order Id") int orderId;
}
public static void main(String[] args) {
OrderEvent e = new OrderEvent();
e.orderId = 42;
e.begin();
// ... do the work being measured ...
e.commit();
System.out.println("Custom JFR event committed for order " + e.orderId);
}
}Rekaman Berkelanjutan
Untuk layanan yang berjalan lama, jalankan rekaman berkelanjutan dengan batas ukuran atau usia (sebuah penyangga melingkar).
Peristiwa lama dibuang ketika peristiwa baru tiba, sehingga penggunaan disk tetap terbatas. Saat insiden terjadi, Anda dapat menyimpan isi penyangga dan langsung memperoleh menit-menit sebelum insiden tersebut.
Menyimpan Isi Saat Keluar
Tambahkan dumponexit=true ke opsi mulai rekaman dan JFR akan menulis isi penyangga saat JVM dimatikan.
Gabungkan dengan -XX:FlightRecorderOptions untuk mengatur ukuran penyangga. Dengan demikian, Anda dapat memastikan data terekam bahkan dari proses yang akan segera berakhir.
Membaca Berkas
Berkas .jfr bersifat biner. Anda dapat menganalisisnya secara visual di Kontrol Misi JDK (pelajaran berikutnya), atau secara terprogram dengan antarmuka jdk.jfr.consumer dan RecordingFile.
Baris perintah jfr print app.jfr juga dapat menuliskan peristiwa sebagai teks untuk penelusuran cepat.
Mengalirkan Peristiwa Secara Langsung
Sejak JDK 14, JFR mendukung pengaliran peristiwa melalui antarmuka jdk.jfr.consumer.RecordingStream.
Alih-alih menyimpan isi berkas lalu membukanya nanti, Anda berlangganan peristiwa saat terjadi dan merespons secara waktu nyata — misalnya, memberikan peringatan saat jeda pengumpulan sampah melampaui ambang batas. Dengan demikian, JFR menjadi sumber pemantauan langsung, bukan hanya alat analisis setelah kejadian.
Pemeriksaan Singkat
Apa alasan utama JFR dapat dibiarkan berjalan di lingkungan produksi?
Rangkuman
JFR adalah perekam data penerbangan bawaan JVM:
- Pengumpulan peristiwa dengan beban tambahan rendah dan aman untuk produksi ke dalam berkas
.jfr. - Mulai melalui
-XX:StartFlightRecordingataujcmd JFR.start. - Pilih setelan bawaan atau profil; tentukan peristiwa khusus.
- Gunakan rekaman penyangga melingkar berkelanjutan dan
dumponexit. - Analisis di Kontrol Misi JDK pada pelajaran berikutnya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Java Flight Recorder” gratis?
Ya — teks lengkap “Java Flight Recorder” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Java Flight Recorder”?
Pembuatan profil dengan overhead rendah. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Java Flight Recorder” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengidentifikasi Bottleneck
- Java Flight Recorder
- Menganalisis dengan JDK Mission Control
- Flag Penyetelan JVM Umum