นิยาม JSTACK:
Jstack เป็นเครื่องมือติดตามสแต็กที่มาพร้อมกับเครื่องเสมือน Java
คำแนะนำพื้นฐาน:
JStack ใช้เพื่อสร้างสแนปชอตเธรดของเวลาปัจจุบันของเครื่องเสมือน Java สแน็ปช็อตเธรดเป็นคอลเลกชันของเมธอดสแต็กที่แต่ละเธรดในเครื่องเสมือน Java ปัจจุบันกำลังดำเนินการ จุดประสงค์หลักของการสร้างสแน็ปช็อตเธรดคือการค้นหาสาเหตุของการหยุดระยะยาวของเธรดเช่นการหยุดชะงักระหว่างเธรดลูปที่ตายแล้วและการรอคอยระยะยาวที่เกิดจากการขอทรัพยากรภายนอก
เมื่อเธรดหยุดชั่วคราวคุณสามารถตรวจสอบสแต็กการโทรของแต่ละเธรดผ่าน JStack และคุณสามารถรู้ได้ว่าเธรดที่ไม่ตอบสนองกำลังทำอะไรอยู่ในพื้นหลังหรือทรัพยากรที่รออยู่
รูปแบบคำสั่ง:
jstack [ตัวเลือก] PID
พารามิเตอร์พื้นฐาน:
-f Force Printing Stack ข้อมูลเมื่อ 'JStack [-l] PID' ไม่มีความสอดคล้องกัน
-l Long List. พิมพ์ข้อมูลเพิ่มเติมเกี่ยวกับการล็อคเช่นรายการซิงโครไนซ์ที่เป็นเจ้าของที่เป็นของ java.util.concurrent
-m พิมพ์ข้อมูลสแต็กทั้งหมดของเฟรมเวิร์ก Java และ Native C/C ++ -h | -ช่วยพิมพ์ข้อมูลความช่วยเหลือ
PID Java Process ID ที่จำเป็นต้องพิมพ์ข้อมูลการกำหนดค่าคุณสามารถใช้เครื่องมือ JPS ในการสืบค้น
กรณี
C:/ผู้ใช้/ผู้ดูแลระบบ> JSTACK 5516full เธรดดั๊มดัม Java ฮอตสปอต (TM) เซิร์ฟเวอร์ 64 บิต VM (24.79-B02 โหมดผสม): "DestroyJavaVM" PRIO = 6 TID = 0x000000000027D800 NID = 0x1BB0 การรอคอย "thread -1" prio = 6 tid = 0x00000000000cb13800 nid = 0x19ac รอรายการจอภาพ [0x00000000d67f000] java.lang.thread.state: บล็อก (บนจอมอนิเตอร์) ที่ Thread.deadlockdemo $ 2.Run (a java.lang.string) - ล็อค <0x00000007D5A9BEB8> (a java.lang.string) ที่ java.lang.thread.run (แหล่งที่ไม่รู้จัก) "Thread -0" Prio = 6 TID = 0x000000000CB0E800 NID = 0x6BC java.lang.thread.state: บล็อก (บนจอมอนิเตอร์วัตถุ) ที่ thread.deadlockdemo $ 1.run (deadlockdemo.java:21) - รอล็อค <0x00000007d5a9beb8> (java.lang.string) java.lang.thread.run (แหล่งที่ไม่รู้จัก)
รหัสการหยุดชะงักทำงานที่นี่ทำให้ทั้งสองเธรดในโปรแกรมรอให้อีกฝ่ายปล่อยล็อคทำให้โปรแกรมถูกปิดกั้น
จากรหัสนี้สามารถเห็นได้อย่างชัดเจนว่าบรรทัดที่ 35 และบรรทัด 21 ใน deadlockdemo.class ถูกบล็อกและจากนั้นเราจำเป็นต้องปรับฟังก์ชั่นนี้ให้เหมาะสม
PS: ในการดำเนินการจริงข้อมูลการถ่ายโอนข้อมูลมักจะไม่เพียงพอที่จะยืนยันปัญหา ขอแนะนำให้สร้างข้อมูลการถ่ายโอนข้อมูลสามข้อมูล หากการถ่ายโอนข้อมูลแต่ละครั้งชี้ไปที่ปัญหาเดียวกันเราจะกำหนดความเป็นไปได้ของปัญหา
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับการวิเคราะห์อินสแตนซ์ JSTACK และเธรดการถ่ายโอนข้อมูลในบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!