การวิเคราะห์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การระบุคอขวด
- Java Flight Recorder
- การวิเคราะห์ด้วย JDK Mission Control
- แฟล็กปรับแต่ง JVM ที่พบบ่อย