Java Academy · Pelajaran

Java Flight Recorder

Pemprofilan dengan overhed rendah

Pelajaran 2 daripada 413 langkah

Java Flight Recorder ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah JFR?

Perakam Penerbangan Java (JFR) ialah enjin pemprofilan dan pengumpulan peristiwa yang dibina terus ke dalam JVM.

Ia merekodkan peristiwa masa jalan yang terperinci — sampel kaedah, peruntukan memori, kutipan sampah, kunci, IO — ke dalam fail binari .jfr, dengan kos tambahan yang sangat rendah. Ia disertakan bersama JDK; tiada ejen tambahan diperlukan.

Mengapa Kos Tambahan Rendah Penting

Pemprofil tradisional yang menambah instrumentasi boleh memperlahankan aplikasi sebanyak dua kali ganda atau lebih, lalu memesongkan ukuran masa yang ingin anda peroleh.

JFR direka bentuk untuk berjalan dalam persekitaran produksi dengan kos tambahan biasanya sekitar 1%. Ini bermakna anda boleh membiarkannya aktif dan merakam keadaan apabila kejadian sebenar berlaku, bukan hanya dalam makmal.

Memulakan Rakaman Semasa Pelancaran

Aktifkan JFR dengan bendera JVM apabila anda memulakan aplikasi:

  • -XX:StartFlightRecording=duration=60s,filename=app.jfr

Ini merekodkan peristiwa selama 60 saat, kemudian menulisnya ke app.jfr. Anda juga boleh memulakan rakaman yang berjalan sehingga JVM keluar.

Mengawal dengan jcmd

Anda juga boleh memulakan, menghentikan dan mengekstrak rakaman pada JVM yang sedang berjalan menggunakan jcmd:

  • jcmd <pid> JFR.start name=rec settings=profile
  • jcmd <pid> JFR.dump name=rec filename=out.jfr
  • jcmd <pid> JFR.stop name=rec

Ini amat sesuai untuk mendapatkan petikan keadaan daripada proses yang sudah berkelakuan tidak normal.

Tetapan: lalai berbanding profil

JFR disertakan dengan dua konfigurasi terbina dalam:

  • lalai — kos tambahan minimum, selamat untuk penggunaan produksi berterusan.
  • profil — pensampelan yang lebih terperinci, kos yang sedikit lebih tinggi, untuk penyiasatan terfokus.

Pilih dengan settings=profile. Anda juga boleh menulis konfigurasi .jfc tersuai untuk melaraskan peristiwa individu.

Peristiwa yang Direkodkan oleh JFR

JFR menangkap pelbagai peristiwa yang kaya, termasuk:

  • Sampel pelaksanaan (ke mana masa CPU digunakan).
  • Peruntukan objek dan aktiviti TLAB.
  • Jeda kutipan sampah.
  • Persaingan kunci (jdk.JavaMonitorWait).
  • IO fail dan soket, utas yang dijeda dan pengecualian.

Setiap peristiwa mempunyai cap masa, tempoh dan jejak tindanan.

Peristiwa Tersuai

Anda boleh mentakrifkan peristiwa JFR anda sendiri untuk mengukur masa logik perniagaan. Luaskan jdk.jfr.Event, tambahkan anotasi padanya, kemudian gunakan begin() / commit() untuk mengapit kerja tersebut.

Inilah bahagian antara muka pengaturcaraan aplikasi JFR yang sesuai untuk penggunaan kendiri. Rakaman sebenar masih memerlukan bendera JVM, tetapi kelas peristiwa itu boleh dikompilasi dan dijalankan pada mana-mana JDK.

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);
    }
}

Rakaman Berterusan

Untuk perkhidmatan yang berjalan lama, jalankan rakaman berterusan dengan saiz atau usia maksimum, iaitu penimbal gelang.

Peristiwa lama dibuang apabila peristiwa baharu tiba, jadi penggunaan cakera kekal terhad. Apabila kejadian berlaku, tulis keluar penimbal tersebut dan anda serta-merta mempunyai minit-minit sebelum kejadian itu.

Menulis Keluar Semasa Keluar

Tambahkan dumponexit=true pada bendera permulaan rakaman penerbangan dan JFR akan menulis penimbal apabila JVM ditutup.

Gabungkan dengan -XX:FlightRecorderOptions untuk menetapkan saiz penimbal. Ini menjamin anda menangkap data walaupun daripada proses yang hampir terhenti.

Membaca Fail

Fail .jfr adalah binari. Anda boleh menganalisisnya secara visual dalam Kawalan Misi JDK (pelajaran seterusnya), atau secara terprogram dengan antara muka pengaturcaraan aplikasi jdk.jfr.consumer dan RecordingFile.

Baris perintah jfr print app.jfr juga boleh menulis keluar peristiwa sebagai teks untuk carian pantas.

Menstrim Peristiwa Secara Langsung

Sejak JDK 14, JFR menyokong penstriman peristiwa melalui antara muka pengaturcaraan aplikasi jdk.jfr.consumer.RecordingStream.

Daripada menulis keluar fail dan membukanya kemudian, anda melanggan peristiwa apabila peristiwa itu berlaku dan bertindak balas dalam masa nyata — contohnya, memberikan amaran apabila jeda kutipan sampah melebihi ambang. Ini menjadikan JFR sebagai sumber pemantauan langsung, bukan sekadar alat analisis selepas kejadian.

Semakan Ringkas

Apakah sebab utama JFR boleh dibiarkan berjalan dalam produksi?

Ringkasan

JFR ialah perakam data penerbangan terbina dalam JVM:

  • Pengumpulan peristiwa dengan kos tambahan rendah dan selamat untuk produksi ke fail .jfr.
  • Mulakan melalui -XX:StartFlightRecording atau jcmd JFR.start.
  • Pilih tetapan lalai atau profil; takrifkan peristiwa tersuai.
  • Gunakan rakaman penimbal gelang berterusan dan dumponexit.
  • Analisis dalam Kawalan Misi JDK seterusnya.
Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Java Flight Recorder” percuma?

Ya — teks penuh “Java Flight Recorder” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Java Flight Recorder”?

Pemprofilan dengan overhed rendah Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Java Flight Recorder” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengenal Pasti Kesempitan
  2. Java Flight Recorder
  3. Menganalisis dengan JDK Mission Control
  4. Bendera Penalaan JVM Lazim
← Kembali ke Java Academy