0Pricing
Java Academy · บทเรียน

Java Flight Recorder

การวิเคราะห์ประสิทธิภาพที่ใช้ทรัพยากรต่ำ

Java Flight Recorder เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

JFR คืออะไร

ตัวบันทึกการทำงานของ Java (JFR) คือเอนจินสำหรับสร้างโพรไฟล์และรวบรวมเหตุการณ์ที่สร้างรวมอยู่ใน JVM โดยตรง

เครื่องมือนี้บันทึกเหตุการณ์ขณะทำงานโดยละเอียด เช่น ตัวอย่างการทำงานของเมธอด การจัดสรรหน่วยความจำ การเก็บคืนหน่วยความจำ ล็อก และ IO ลงในไฟล์ไบนารี .jfr โดยมีค่าใช้จ่ายด้านประสิทธิภาพต่ำมาก เครื่องมือนี้มาพร้อมกับ JDK จึงไม่ต้องใช้เอเจนต์เพิ่มเติม

เหตุใดค่าใช้จ่ายด้านประสิทธิภาพต่ำจึงสำคัญ

เครื่องมือสร้างโพรไฟล์แบบแทรกการวัดแบบดั้งเดิมอาจทำให้แอปทำงานช้าลงสองเท่าหรือมากกว่า จนทำให้เวลาที่คุณต้องการวัดคลาดเคลื่อนไป

JFR ได้รับการออกแบบให้ทำงานในระบบจริง โดยทั่วไปมีค่าใช้จ่ายด้านประสิทธิภาพประมาณ 1% นั่นหมายความว่าคุณสามารถเปิดใช้งานไว้และเก็บบันทึกเมื่อเกิดเหตุขัดข้องจริง แทนที่จะใช้เฉพาะในห้องทดลอง

เริ่มบันทึกเมื่อเปิดใช้งาน

เปิดใช้งาน JFR ด้วยแฟล็กของ JVM เมื่อเริ่มแอปพลิเคชัน:

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

การตั้งค่านี้จะบันทึกเหตุการณ์เป็นเวลา 60 วินาที แล้วเขียนลงใน app.jfr คุณยังสามารถเริ่มการบันทึกที่ทำงานต่อไปจนกว่า JVM จะสิ้นสุดการทำงานได้

การควบคุมด้วยคำสั่ง JVM

คุณยังสามารถเริ่ม หยุด และส่งออกการบันทึกบน JVM ที่กำลังทำงานอยู่ได้โดยใช้คำสั่งต่อไปนี้:

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

วิธีนี้เหมาะอย่างยิ่งสำหรับเก็บภาพสถานะจากกระบวนการที่กำลังทำงานผิดปกติอยู่

การตั้งค่า: ค่าเริ่มต้นเทียบกับโพรไฟล์

JFR มาพร้อมการกำหนดค่าในตัวสองแบบ:

  • ค่าเริ่มต้น — มีค่าใช้จ่ายด้านประสิทธิภาพต่ำ เหมาะสำหรับใช้งานต่อเนื่องในระบบจริง
  • โพรไฟล์ — สุ่มตัวอย่างได้ละเอียดกว่า มีค่าใช้จ่ายสูงขึ้นเล็กน้อย เหมาะสำหรับการตรวจสอบเฉพาะจุด

เลือกใช้ด้วย settings=profile นอกจากนี้คุณยังเขียนการกำหนดค่า .jfc แบบกำหนดเองเพื่อปรับเหตุการณ์แต่ละรายการได้

สิ่งที่ JFR บันทึก

JFR บันทึกเหตุการณ์ได้หลากหลาย รวมถึง:

  • ตัวอย่างการทำงาน (เวลาของ CPU ถูกใช้ไปที่ใด)
  • การจัดสรรอ็อบเจ็กต์และกิจกรรมของ TLAB
  • ช่วงหยุดระหว่างการเก็บคืนหน่วยความจำ
  • การแย่งใช้ล็อก (jdk.JavaMonitorWait)
  • ไฟล์และซ็อกเก็ต IO การพักเธรด และข้อยกเว้น

เหตุการณ์แต่ละรายการมีการประทับเวลา ระยะเวลา และร่องรอยการเรียกใช้งาน

เหตุการณ์แบบกำหนดเอง

คุณสามารถกำหนดเหตุการณ์ JFR ของตนเองเพื่อวัดเวลาของตรรกะทางธุรกิจได้ โดยสืบทอดจาก jdk.jfr.Event ใส่คำอธิบายประกอบ แล้วครอบงานด้วย begin() / commit()

ส่วนนี้ของส่วนเชื่อมต่อโปรแกรม JFR เหมาะสำหรับแอปแบบแยกเดี่ยว การบันทึกจริงยังต้องใช้แฟล็กของ JVM แต่คลาสเหตุการณ์สามารถคอมไพล์และทำงานบน 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);
    }
}

การบันทึกอย่างต่อเนื่อง

สำหรับบริการที่ทำงานเป็นเวลานาน ให้ใช้การบันทึกอย่างต่อเนื่องโดยกำหนดขนาดหรืออายุสูงสุดไว้ ซึ่งเรียกว่าบัฟเฟอร์วงแหวน

เหตุการณ์เก่าจะถูกลบออกเมื่อมีเหตุการณ์ใหม่เข้ามา ทำให้การใช้พื้นที่ดิสก์มีขอบเขตจำกัด เมื่อเกิดเหตุขัดข้อง คุณสามารถส่งออกบัฟเฟอร์และได้ข้อมูลหลายนาทีก่อนเกิดเหตุการณ์นั้นทันที

ส่งออกเมื่อสิ้นสุดการทำงาน

เพิ่ม dumponexit=true ลงในแฟล็กสำหรับเริ่มบันทึกการทำงาน แล้ว JFR จะเขียนบัฟเฟอร์เมื่อ JVM ปิดการทำงาน

ใช้ร่วมกับ -XX:FlightRecorderOptions เพื่อกำหนดขนาดบัฟเฟอร์ วิธีนี้รับรองว่าคุณจะเก็บข้อมูลได้แม้แต่จากกระบวนการที่กำลังจะสิ้นสุดลง

อ่านไฟล์

ไฟล์ .jfr เป็นไฟล์ไบนารี คุณสามารถวิเคราะห์ด้วยภาพในเครื่องมือควบคุมภารกิจของ JDK (บทถัดไป) หรือวิเคราะห์ด้วยโปรแกรมผ่านส่วนเชื่อมต่อโปรแกรม jdk.jfr.consumer และ RecordingFile

บรรทัดคำสั่ง jfr print app.jfr ยังสามารถส่งออกเหตุการณ์เป็นข้อความเพื่อค้นหาอย่างรวดเร็วได้

ส่งเหตุการณ์แบบต่อเนื่องทันที

ตั้งแต่ JDK 14 เป็นต้นมา JFR รองรับการส่งเหตุการณ์แบบต่อเนื่องผ่านส่วนเชื่อมต่อโปรแกรม jdk.jfr.consumer.RecordingStream

แทนที่จะส่งออกไฟล์แล้วเปิดภายหลัง คุณสามารถสมัครรับเหตุการณ์ขณะที่เกิดขึ้นและตอบสนองได้ทันที เช่น แจ้งเตือนเมื่อช่วงหยุดจากการเก็บคืนหน่วยความจำเกินเกณฑ์ วิธีนี้ทำให้ JFR เป็นแหล่งข้อมูลสำหรับตรวจสอบแบบสด ไม่ใช่เพียงเครื่องมือวิเคราะห์ย้อนหลังหลังเกิดเหตุ

ตรวจสอบอย่างรวดเร็ว

เหตุผลหลักที่สามารถเปิด JFR ทิ้งไว้ในระบบจริงได้คืออะไร

สรุป

JFR คือเครื่องบันทึกข้อมูลการทำงานในตัวของ JVM:

  • รวบรวมเหตุการณ์ที่มีค่าใช้จ่ายด้านประสิทธิภาพต่ำและปลอดภัยสำหรับระบบจริงลงในไฟล์ .jfr
  • เริ่มทำงานผ่าน -XX:StartFlightRecording หรือ jcmd JFR.start
  • เลือกการตั้งค่าค่าเริ่มต้นหรือโพรไฟล์ และกำหนดเหตุการณ์แบบกำหนดเองได้
  • ใช้การบันทึกต่อเนื่องด้วยบัฟเฟอร์วงแหวนและ dumponexit
  • วิเคราะห์ด้วยเครื่องมือควบคุมภารกิจของ JDK ในบทถัดไป

คำถามที่พบบ่อย

บทเรียน “Java Flight Recorder” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Java Flight Recorder” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Java Flight Recorder”

การวิเคราะห์ประสิทธิภาพที่ใช้ทรัพยากรต่ำ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “Java Flight Recorder” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การระบุคอขวด
  2. Java Flight Recorder
  3. การวิเคราะห์ด้วย JDK Mission Control
  4. แฟล็กปรับแต่ง JVM ที่พบบ่อย
← กลับไปที่ Java Academy