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

การวิเคราะห์ด้วย JDK Mission Control

อ่านบันทึก JFR

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

JMC คืออะไร

เครื่องมือควบคุมภารกิจของ JDK (JMC) คือเครื่องมือแบบกราฟิกสำหรับวิเคราะห์การบันทึกของ JFR

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

ติดตั้ง JMC

JMC เป็นเครื่องมือที่ดาวน์โหลดแยกต่างหาก (ถูกแยกออกจาก JDK หลัง JDK 8)

ดาวน์โหลดรุ่นของ JMC จาก Adoptium หรือ Oracle เปิดใช้งาน แล้วเปิดไฟล์ .jfr ด้วย ไฟล์ > เปิดไฟล์ ไม่ต้องใช้เอเจนต์หรือเริ่มแอปใหม่ คุณสามารถวิเคราะห์การบันทึกที่เก็บไว้แล้วได้ทันที

หน้าการวิเคราะห์อัตโนมัติ

สิ่งแรกที่ JMC แสดงคือการวิเคราะห์อัตโนมัติ ซึ่งเป็นชุดหลักเกณฑ์เชิงประสบการณ์ที่ใช้ประเมินการบันทึกของคุณ

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

มุมมองการสร้างโพรไฟล์เมธอด

หน้าการสร้างโพรไฟล์เมธอดจะรวบรวมตัวอย่างการทำงานเป็นต้นไม้การเรียก

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

กราฟเปลวไฟ

JMC แสดงตัวอย่างสแตกเป็นกราฟเปลวไฟ โดยความกว้างแปรผันตามเวลาที่ใช้

พื้นที่ราบกว้างใกล้ด้านบนของกราฟคือจุดที่ CPU ใช้รอบประมวลผลจริง ภาพนี้ทำให้เห็นได้ชัดว่าเส้นทางการเรียกใดใช้เวลาส่วนใหญ่ โดยตรวจสอบได้เร็วกว่าการอ่านตารางที่เรียงลำดับไว้มาก

มุมมองการเก็บคืนหน่วยความจำ

หน้าเกี่ยวกับการเก็บคืนหน่วยความจำจะแสดงระยะเวลาหยุด ความถี่ และตัวเก็บคืนหน่วยความจำที่ทำงาน

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

จุดที่มีการจัดสรรหน่วยความจำสูง

มุมมองการจัดสรร TLABของ JMC จะจัดอันดับจุดที่มีการสร้างอ็อบเจ็กต์

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

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Autoboxing: each add boxes an int into an Integer object
        List<Integer> boxed = new ArrayList<>();
        for (int i = 0; i < 5; i++) boxed.add(i);
        System.out.println("Boxed " + boxed.size() + " Integers");
        System.out.println("JMC allocation view would flag this hotspot");
    }
}

การแย่งใช้ล็อก

มุมมองอินสแตนซ์ของล็อกและมุมมองมอนิเตอร์ Java แสดงให้เห็นเธรดที่กำลังรอการซิงโครไนซ์

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

มุมมองเธรดและเวลาแฝง

หน้าเธรดจะแสดงเส้นเวลาของแต่ละเธรดว่าใช้ CPU อยู่ พักอยู่ รอ IO หรือถูกบล็อก

นี่คือวิธียืนยันว่าการทำงานช้าลงนั้นจำกัดด้วย CPU หรือจำกัดด้วย IO ซึ่งเป็นความแตกต่างเดียวกับในบทเรียนเรื่องคอขวด แถบการรอที่กว้างหมายความว่าระบบถูกจำกัดด้วย IO หรือล็อก ไม่ได้จำกัดด้วยการคำนวณ

จากการตรวจพบสู่การแก้ไข

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

เปลี่ยนทีละอย่าง บันทึกใหม่ และเปรียบเทียบกับค่าพื้นฐาน JMC เปลี่ยนไฟล์ไบนารีให้เป็นข้อมูลเชิงลึกที่นำไปดำเนินการได้

เปรียบเทียบการบันทึก

หากต้องการพิสูจน์ว่าการปรับให้เหมาะสมได้ผล ให้เปรียบเทียบการบันทึก 'ก่อน' และ 'หลัง'

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

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

ในมุมมองการสร้างโพรไฟล์เมธอดและกราฟเปลวไฟของ JMC เวลาที่เมธอดใช้เอง หรือพื้นที่ราบกว้างด้านบน บ่งชี้อะไร

สรุป

JMC อ่านการบันทึกของ JFR และเปลี่ยนให้เป็นข้อมูลที่นำไปดำเนินการได้:

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

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

บทเรียน “การวิเคราะห์ด้วย JDK Mission Control” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การวิเคราะห์ด้วย JDK Mission Control”

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

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

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

บทเรียน “การวิเคราะห์ด้วย JDK Mission Control” ใช้เวลานานแค่ไหน

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

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

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

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

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