Java Virtual Machine (JVM) สร้าง 3 สิ่งประดิษฐ์ที่สำคัญซึ่งมีประโยชน์สำหรับการเพิ่มประสิทธิภาพและการแก้ไขปัญหาการผลิต สิ่งประดิษฐ์เหล่านั้นคือ:

  1. บันทึกการเก็บขยะ (GC)
  2. การถ่ายโอนข้อมูลเธรด
  3. กองขยะ

Contents

1. บันทึกการเก็บขยะ

ก) บันทึก GC คืออะไร?

GC Log มีข้อมูลที่เกี่ยวข้องกับกิจกรรมการรวบรวมขยะ โดยจะระบุจำนวนเหตุการณ์ GC ที่รัน คำสั่งประเภทใดของคำสั่งของเหตุการณ์ GC ที่พวกเขาเป็น (เช่น Young GC หรือ Full GC) เหตุการณ์ GC แต่ละรายการหยุดแอปพลิเคชันชั่วคราว จำนวนอ็อบเจ็กต์ที่แต่ละเหตุการณ์ GC เรียกคืน

b) บันทึก GC มีลักษณะอย่างไร

ไฟล์บันทึกการเก็บขยะตัวอย่างสามารถพบได้ที่นี่

c) GC Logs ใช้ที่ไหน?

บันทึกการรวบรวมขยะใช้เพื่อศึกษา GC และประสิทธิภาพของหน่วยความจำของแอปพลิเคชัน ใช้เพื่อเพิ่มประสิทธิภาพเวลาหยุดชั่วคราวของ GC ใช้เพื่อระบุขนาดหน่วยความจำที่เหมาะสมที่สุดสำหรับแอปพลิเคชันของคุณ นอกจากนี้ยังใช้เพื่อแก้ไขปัญหาเกี่ยวกับหน่วยความจำ

d) จะสร้างบันทึก GC ได้อย่างไร?

คุณสามารถสร้างบันทึกการรวบรวมขยะโดยส่งอาร์กิวเมนต์ JVM ต่อไปนี้:

ในเวอร์ชัน Java จนถึง 8:

ในเวอร์ชัน Java เริ่มตั้งแต่ 9:

file-path: คือตำแหน่งที่จะเขียนล็อกไฟล์ Garbage Collection

จ) จะเข้าใจบันทึก GC ได้อย่างไร?

รูปแบบบันทึกการรวบรวมขยะจะแตกต่างกันไปขึ้นอยู่กับว่าใครเป็นผู้จำหน่าย JVM ของคุณ (Oracle, HP, IBM, Azul, ..), เวอร์ชัน Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), ขยะ อัลกอริทึมการรวบรวม (Serial, Parallel, CMS, G1, Shenandoah, Z GC) และอาร์กิวเมนต์ JVM ที่คุณส่งผ่าน ดังนั้นจึงไม่มีรูปแบบมาตรฐานเดียวที่ใช้ได้ อย่างไรก็ตาม นี่คือวิดีโอแนะนำ ซึ่งพยายามช่วยให้คุณเข้าใจรูปแบบไฟล์บันทึก GC

f) เครื่องมือใดที่ใช้ในการวิเคราะห์บันทึก GC

มีเครื่องมือวิเคราะห์บันทึกการรวบรวมขยะมากมาย รายการยอดนิยมบางส่วนมีให้ที่นี่: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat

2. การถ่ายโอนข้อมูลเธรด

ก) การถ่ายโอนข้อมูลเธรดคืออะไร?

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

ข) การถ่ายโอนข้อมูลเธรดมีลักษณะอย่างไร

คุณสามารถดูดัมพ์เธรดตัวอย่างได้ที่นี่

c) Thread Dump ใช้ที่ไหน?

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

d) จะสร้างเธรดดัมพ์ได้อย่างไร?

สามารถดักจับเธรดดัมพ์จากแอปพลิเคชันที่ทำงานอยู่โดยใช้ 8 ตัวเลือกที่แตกต่างกัน ตัวเลือกที่พบบ่อยที่สุดในการถ่ายโอนเธรดคือการใช้เครื่องมือ ‘jstack’ เครื่องมือ jstack จัดส่งในโฟลเดอร์ JDK_HOMEbin นี่คือคำสั่งที่คุณต้องออกเพื่อดักจับเธรดดัมพ์:

pid: คือ Process Id ของแอปพลิเคชันที่ควรดักจับดัมพ์ของเธรด

file-path: เป็นพาธของไฟล์ที่จะเขียน thread dump

e) จะเข้าใจ Thread Dump ได้อย่างไร?

นี่คือวิดีโอพูดคุยที่ให้ภาพรวมโดยละเอียดเกี่ยวกับวิธีการทำความเข้าใจการทิ้งเธรด

f) เครื่องมือใดที่ใช้ในการวิเคราะห์การถ่ายโอนข้อมูลเธรด

เครื่องมือวิเคราะห์เธรดดัมพ์ที่ใช้กันอย่างแพร่หลายมีดังนี้: fastThread, Samurai, IBM Thread & Monitor analyzer, Visual VM

3. กองการถ่ายโอนข้อมูล

ก) Heap Dump คืออะไร?

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

b) Heap Dump มีลักษณะอย่างไร

สามารถดูตัวอย่างฮีพดัมพ์ได้ที่นี่ (หมายเหตุ: มันจะอยู่ในรูปแบบไบนารี ดังนั้นคุณจึงอ่านไม่ออกจริงๆ)

c) Heap Dump ใช้ที่ไหน?

ฮีปดัมพ์ส่วนใหญ่จะใช้สำหรับการแก้ไขปัญหาเกี่ยวกับหน่วยความจำ ปัญหา OutOfMemoryError

d) จะสร้าง Heap Dump ได้อย่างไร?

สามารถดักจับฮีพดัมพ์จากแอปพลิเคชันที่ทำงานอยู่โดยใช้ 7 ตัวเลือกที่แตกต่างกัน ตัวเลือกทั่วไปในการถ่ายโอนฮีปส่วนใหญ่คือการใช้เครื่องมือ ‘jmap’ เครื่องมือ jmap จัดส่งในโฟลเดอร์ JDK_HOMEbin นี่คือคำสั่งที่คุณต้องใช้ในการจับภาพ:

pid: คือ Java Process Id ที่ควรดักจับฮีพดัมพ์

file-path: เป็นพาธของไฟล์ที่จะเขียน heap dump

e) จะเข้าใจ Heap Dump ได้อย่างไร?

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

f) เครื่องมือใดที่ใช้ในการวิเคราะห์ Heap Dump?

เครื่องมือวิเคราะห์ heap dump ที่ใช้กันอย่างแพร่หลาย ได้แก่ Eclipse MAT, HeapHero, JVisualVM
เราหวังว่าบทความนี้จะครอบคลุมวิธีการทั้งหมดสำหรับวิธีวิเคราะห์บันทึกการรวบรวมขยะ การถ่ายโอนข้อมูลเธรด และการถ่ายโอนข้อมูลแบบกอง หากคุณพบว่าบทความนี้มีประโยชน์กับคุณจริงๆ โปรดแบ่งปันข้อมูลนี้กับเพื่อน ญาติ ครอบครัว และคนอื่นๆ เจอกันใหม่กระทู้หน้ากับ signalfix.net!