การถ่ายโอนข้อมูลเธรดสามารถช่วยเรากำหนดยอด CPU, การหยุดชะงัก, ข้อยกเว้นหน่วยความจำ, การตอบสนองแอปพลิเคชันช้าเวลาตอบสนองที่ยาวนานและปัญหาระบบอื่น ๆ เครื่องมือวิเคราะห์ออนไลน์บางอย่างเช่น http://fastthread.io/ ยังสามารถช่วยเราวิเคราะห์และค้นหาปัญหา แต่เครื่องมือเหล่านี้ต้องใช้ไฟล์ถ่ายโอนข้อมูล ดังนั้นในบทความนี้ฉันสรุปวิธีการคว้าไฟล์ด้าย Java ทิ้งไฟล์ใน 7
1. Jstack
JSTACK เป็นเครื่องมือบรรทัดคำสั่งที่มีประสิทธิภาพสำหรับการรวบรวมข้อมูลไฟล์ดัมเธรด มันตั้งอยู่ในโฟลเดอร์ Bin (JDK_HOME/BIN) ในไดเรกทอรี JDK ต่อไปนี้เป็นคำสั่งในการรวบรวมข้อมูลไฟล์ Dump:
jstack -l <pid>> <file -path>
ภาพประกอบ:
PID: รหัสกระบวนการของแอปพลิเคชัน Java นั่นคือรหัสกระบวนการแอปพลิเคชันที่จำเป็นต้องรวบรวมข้อมูลไฟล์ Dump
Path File: เส้นทางที่จะบันทึกไฟล์ Dump
ตัวอย่าง:
jstack -l 37320> /opt/tmp/threaddump.txt
ตัวอย่างข้างต้นแสดงให้เห็นว่าการใช้ JSTACK เพื่อสร้างไฟล์ Dump ลงในไดเรกทอรี/opt/tmp/threaddump.txt
เริ่มต้นจาก Java5 Jstack ได้รวมอยู่ใน JDK หากคุณใช้ JDK เวอร์ชันเก่าคุณควรพิจารณาใช้วิธีการอื่น
2. ฆ่า -3
ในแง่ของการพิจารณาความปลอดภัยเครื่องบางเครื่องในสภาพแวดล้อมการผลิตมีเฉพาะสภาพแวดล้อม JRE ดังนั้นจึงไม่สามารถใช้เครื่องมือ JStack ได้ ในกรณีนี้เราสามารถใช้ฆ่า -3:
kill -3 <pid>
ภาพประกอบ:
PID: รหัสกระบวนการของแอปพลิเคชัน Java นั่นคือรหัสกระบวนการแอปพลิเคชันที่จำเป็นต้องรวบรวมข้อมูลไฟล์ Dump
ตัวอย่าง:
kill -3 37320
เมื่อใช้ Kill -3 เพื่อสร้างไฟล์ Dump ไฟล์ Dump จะถูกส่งไปยังสตรีมข้อผิดพลาดมาตรฐาน หากแอปพลิเคชันของคุณทำงานบน Tomcat เนื้อหาการถ่ายโอนข้อมูลจะถูกส่งไปยังไฟล์ <tomcat_home> /logs/catalina.out
3. jvisualvm
Java VisualVM เป็นเครื่องมืออินเตอร์เฟสแบบกราฟิกที่สามารถให้ข้อมูล JVM มันอยู่ในไฟล์ jdk_home/bin/jvisualvm.exe เริ่มต้นด้วย JDK6 Update7 รวมอยู่ใน JDK
เรียกใช้ JVISUALVM และในแผงด้านซ้าย (ดังแสดงในรูปด้านล่าง) ข้อมูล JVM ที่กำลังทำงานอยู่ในรายการ เครื่องมือนี้สามารถคว้าไฟล์ Dump จาก Local หรือ Remote Running JVM ได้
คลิกปุ่ม DREVLE DUMP ที่สอดคล้องกับชื่อกระบวนการในรูปด้านบนเพื่อสร้างไฟล์ดั๊มดังแสดงในรูปด้านล่าง:
4. JMC
Java Mission Control (JMC) เป็นเครื่องมือที่สามารถรวบรวมและวิเคราะห์ข้อมูลจากสภาพแวดล้อมในท้องถิ่นหรือการผลิต เริ่มต้นด้วยการอัปเดต Oracle JDK 7 40 ซึ่งรวมอยู่ใน JDK ซึ่งสามารถสร้างไฟล์ดั๊มป์จาก JVM JMC อยู่ในไฟล์ JDK_HOME/BIN/JMC.EXE:
หลังจากเรียกใช้เครื่องมือคุณสามารถเห็นกระบวนการ Java ที่ทำงานในเครื่องซึ่งสามารถเชื่อมต่อกับเครื่องระยะไกลได้ ดับเบิลคลิกกระบวนการ Java ที่คุณต้องการสร้างไฟล์ Dump คลิก Flight Recorder และคุณจะเห็นกล่องโต้ตอบต่อไปนี้:
ในกล่องดรอปดาวน์เธรด Dump คุณสามารถเลือกช่วงเวลาสำหรับการสร้างไฟล์ดั๊ม ในตัวอย่างข้างต้นไฟล์ดั๊มจะถูกสร้างขึ้นทุก ๆ 60 วินาที หลังจากเลือกเสร็จสมบูรณ์แล้วให้เริ่มการบันทึกการบินและคุณสามารถดูเนื้อหาของไฟล์ดั๊มในแผงเธรด:
5. Windows (Ctrl + Break)
วิธีนี้ใช้ได้เฉพาะกับระบบปฏิบัติการ Windows เท่านั้น:
เลือกบรรทัดคำสั่งบนหน้าต่างคอนโซล
กดคำสั่ง "ctrl + break" บนหน้าต่างบรรทัดคำสั่ง
จากนั้นจะมีการสร้างไฟล์ Dump และเนื้อหาของไฟล์ Dump จะถูกพิมพ์บนหน้าต่างบรรทัดคำสั่ง
หมายเหตุ 1: มีโน้ตบุ๊กหลายเล่ม (เช่นซีรี่ส์ Lenovo T) ที่ยกเลิกปุ่ม "break" ซึ่งในกรณีนี้คุณต้องใช้ Google สำหรับคีย์ที่มีฟังก์ชั่นที่คล้ายกันกับคีย์ Break และฉันพบว่าคีย์ "ฟังก์ชัน + B" นั้นเหมือนกับปุ่ม Break ดังนั้นฉันจึงใช้คีย์ "Ctrl + FN + B"
หมายเหตุ 2: ข้อเสียอย่างหนึ่งของการใช้วิธีการข้างต้นคือเนื้อหาของไฟล์ Dump จะถูกพิมพ์ไปยังคอนโซล หากไม่มีไฟล์ Dump มันเป็นเรื่องยากสำหรับเราที่จะใช้เครื่องมือวิเคราะห์เช่น http://fasthread.io เพื่อวิเคราะห์ไฟล์ Dump ดังนั้นคุณสามารถใช้คำสั่งต่อไปนี้เพื่อส่งออกเนื้อหาของไฟล์ Dump ไปยังไฟล์ข้อความ ตัวอย่างเช่นชื่อแอปพลิเคชันของคุณคือ SampleTheReadProgram ดังนั้นคำสั่งปกติมีดังนี้:
java -classpath . SampleThreadProgram
คำสั่งที่จะส่งออกเนื้อหาของไฟล์ Dump ไปยังไฟล์ข้อความมีดังนี้:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
หลังจากที่คุณกดปุ่ม "Ctrl + Break" ไฟล์ Dump จะถูกบันทึกลงใน C: /Workspace/threaddump.txt
6. Threadmxbean
เริ่มต้นด้วย JDK 1.5 มีการแนะนำ ThreadmxBean แล้ว นี่คืออินเทอร์เฟซการจัดการของ JVM การใช้อินเทอร์เฟซนี้คุณต้องใช้รหัสเพียงเล็กน้อยในการสร้างไฟล์ Dump ต่อไปนี้คือการใช้งานหลักของการใช้ ThreadmxBean เพื่อสร้างไฟล์ดั๊มป์:
โมฆะสาธารณะ DumpThreadDump () {ThreadmxBean ThreadmxBean = ManagementFactory.getThreadMxBean (); สำหรับ (threadInfo ti: threadmxbean.dumpallthreads (จริง, จริง)) {system.out.print (ti.toString ()); -7. แอปเครื่องมือ APM Dynamics
เครื่องมือตรวจสอบประสิทธิภาพการทำงานของแอปพลิเคชันบางอย่างให้ฟังก์ชั่นของการสร้างไฟล์ถ่ายโอนข้อมูล หากคุณใช้แอพพลิเคชั่นเพื่อตรวจสอบแอปพลิเคชันของคุณต่อไปนี้เป็นขั้นตอนในการสร้างไฟล์ดั๊มป์:
เปิดหน้าต่างสร้างการกระทำและเลือกการวินิจฉัย-> ใช้การถ่ายโอนข้อมูลเธรดในหน้าต่างสร้างการกระทำ
ป้อนชื่อการดำเนินการจำนวนไฟล์ถ่ายโอนข้อมูลเพื่อรวบรวมข้อมูลและช่วงเวลา (มิลลิวินาที) สำหรับการรวบรวมข้อมูลไฟล์ถ่ายโอนข้อมูล
หากคุณต้องการดำเนินการบางอย่างก่อนที่การดำเนินการถ่ายโอนข้อมูลการรวบรวมข้อมูลจะเริ่มขึ้นคุณสามารถเลือกการอนุมัติการอนุมัติที่ต้องการก่อนช่องทำเครื่องหมายการกระทำนี้และป้อนที่อยู่อีเมลของบุคคลหรือกลุ่ม
คลิกตกลง
สรุป
แม้ว่าฉันจะแสดง 7 วิธีในการคว้าไฟล์ Dump ก่อนหน้านี้ IMHO, JSTACK และ KILL -3 เป็นตัวเลือกที่ดีที่สุดด้วยเหตุผลต่อไปนี้:
. เรียบง่ายใช้งานง่าย
ข. ทั่วไป: ในกรณีส่วนใหญ่โดยไม่คำนึงถึงประเภทระบบปฏิบัติการผู้ขาย Java รุ่น JVM ฯลฯ