เวลาในการสร้าง
เมื่อโปรแกรม Java กำลังทำงานอยู่ บางครั้งไฟล์ JavaCore และ HeapDump จะถูกสร้างขึ้น ซึ่งมักจะเกิดขึ้นเมื่อโปรแกรม Java ประสบปัญหาร้ายแรง
บางครั้งหลังจากเกิดปัญหาร้ายแรง แอปพลิเคชัน Java จะไม่ตายและสามารถทำงานต่อไปได้
แต่บางครั้งปัญหาร้ายแรงเกิดขึ้นและกระบวนการ Java ก็จะตาย
เพื่อรักษาสถานะการทำงานของแอปพลิเคชัน Java ก่อนที่จะเกิดข้อผิดพลาดร้ายแรง JVM จะสร้างไฟล์สองไฟล์ก่อนที่จะตาย ได้แก่ ไฟล์ JavaCore และ HeapDump
ความแตกต่างคืออะไร
JavaCore เป็นเรื่องเกี่ยวกับ CPU ในขณะที่ไฟล์ HeapDump เป็นเรื่องเกี่ยวกับหน่วยความจำ
ไฟล์ JavaCore จะบันทึกตำแหน่งการทำงานของแต่ละเธรดของแอปพลิเคชัน Java ในช่วงเวลาหนึ่งเป็นหลัก นั่นคือ คลาสใด วิธีการใด และบรรทัดใดที่ JVM ดำเนินการ เป็นไฟล์ข้อความ หลังจากเปิดแล้ว คุณจะเห็นสแต็กการดำเนินการของแต่ละเธรดและแสดงเป็นสแต็กเทรซ โดยการวิเคราะห์ไฟล์ JavaCore เราจะสามารถค้นหาได้ว่าแอปพลิเคชันนั้น "ติดอยู่" ณ จุดใดจุดหนึ่งหรือไม่ กล่าวคือ ใช้เวลาทำงานนานเกินไปที่จุดใดจุดหนึ่ง เช่น การสืบค้นฐานข้อมูลที่ไม่ได้รับการตอบกลับเป็นเวลานาน เวลานำไปสู่ระบบล่มในที่สุด
ไฟล์ HeapDump เป็นไฟล์ไบนารีที่บันทึกการใช้งานอ็อบเจ็กต์ในฮีป JVM ในช่วงเวลาหนึ่ง ไฟล์ประเภทนี้ต้องใช้เครื่องมือที่เกี่ยวข้องในการวิเคราะห์ เช่น เครื่องมือ เช่น IBM Heap Analyzer ฟังก์ชันที่สำคัญที่สุดของไฟล์ประเภทนี้คือการวิเคราะห์ว่ามีหน่วยความจำล้นในระบบหรือไม่
วิธีการสร้าง
สามารถสร้างไฟล์ทั้งสองนี้ได้ด้วยตนเอง เมื่อเราพบสถานการณ์ที่ระบบทำงานช้าหรือไม่ตอบสนอง เราสามารถสร้างไฟล์ JavaCore และ HeapDump ได้ด้วยตนเอง
บน Unix/Linux วิธีสร้างไฟล์ทั้งสองนี้มีดังนี้:
#ps -ef | .grep จาวา
ผู้ใช้ 4616 4582 0 17:30 pts/0 00:00:00 grep java
รูต 5580 1 0 ตุลาคม 27? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/รับรอง -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local /tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap เริ่มต้น
# ฆ่า -3 5580
วิธีการวิเคราะห์
ไฟล์จาวาคอร์
ไฟล์ทั้งสองชุดมีประสิทธิภาพเป็นพิเศษเมื่อวิเคราะห์ JavaCore เนื่องจากสามารถดูตำแหน่งการดำเนินการของเธรดได้ในเวลาสองจุด หากพบว่าเธรดเดียวกันถูกดำเนินการที่ตำแหน่งเดียวกันในข้อมูลทั้งสองชุด แสดงว่าอาจจะมีปัญหาตรงนี้ เนื่องจากโปรแกรมทำงานเร็วมาก หากถึงจุดใดจุดหนึ่ง แสดงว่าจุดนี้ใช้เวลานานมาก โดยการวิเคราะห์ 2 ไฟล์นี้ เราก็จะสามารถทราบสาเหตุและแก้ไขได้ ปัญหา
มีเครื่องหมาย "รายละเอียดเธรดปัจจุบัน" ในส่วนหัวของไฟล์ JavaCore ซึ่งบันทึก ID เธรดของระบบที่ทำงานเมื่อสร้าง JavaCore ใช้ ID เธรดเพื่อค้นหาข้อมูลโดยละเอียดของเธรดในไฟล์นี้ คลาสใดที่เธรดกำลังทำงานอยู่และทำให้ JavaCore
โมฆะ ------------------------------------------------- - -----------------------
0SECTION TITLE รูทีนดัมพ์คอมโพเนนต์ย่อย
โมฆะ ===============================
1ได้รับหน่วยความจำแล้ว
1TIDATETIME วันที่: 12/07/2011 เวลา 15:59:42 น.
1TIFILENAME ชื่อไฟล์ Javacore:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt
โมฆะ ------------------------------------------------- - -----------------------
0SECTION XHPI รูทีนดัมพ์คอมโพเนนต์ย่อย
โมฆะ ==============================
1XHTIME วันพุธที่ 7 ธันวาคม 15:59:42 2554
1XHSIGRECV ได้รับสัญญาณที่ไม่คาดคิด -1 ที่ 0x0 ใน <ไม่ทราบ> สิ้นสุดการประมวลผล
1XHFULLVERSION J2RE 1.4.2 IBM AIX บิวด์ ca142ifx-20090918 (SR13 FP2)
โมฆะ
1XHCURRENTTHD รายละเอียดเธรดปัจจุบัน
โมฆะ ---------------------------
2XHCURRSYSTHD "เว็บคอนเทนเนอร์: 5" sys_thread_t:0x45FB5328
3XHNATIVESTACK สแต็กเนทิฟ
โมฆะ------------
3XHSTACKLINEERR ไม่พร้อมใช้งาน - ที่อยู่สแต็กไม่ถูกต้อง
-
-
0SECTION รูทีนดัมพ์คอมโพเนนต์ย่อย XM
โมฆะ ============================
โมฆะ
1XMCURTHDINFO รายละเอียดเธรดปัจจุบัน
โมฆะ ---------------------------
3XMTHREADINFO "WebContainer : 5" (TID:0x70A8E260, sys_thread_t:0x45FB5328, สถานะ:R, รหัสดั้งเดิม:0x5CC0) prio=5
4XESTACKTRACE ที่ org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString (แหล่งที่ไม่รู้จัก)
4XESTACKTRACE ที่ org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString (แหล่งที่ไม่รู้จัก)
4XESTACKTRACE ที่ org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag (ไม่ทราบแหล่งที่มา)
4XESTACKTRACE ที่ com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(คอมไพล์โค้ด))
4XESTACKTRACE ที่ com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(คอมไพล์โค้ด))
4XESTACKTRACE ที่ com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(คอมไพล์โค้ด))
4XESTACKTRACE ที่ com.ibm._jsp._part._jspService(_part.java:3237)
ไฟล์ฮีปดัมพ์
ไฟล์ HeapDump เป็นสแน็ปช็อตของสแต็ก Java ในเวลาที่กำหนดและเป็นไฟล์รูปภาพประเภทหนึ่ง เครื่องมือ Heap Analyzer จะวิเคราะห์ไฟล์ HeapDump เพื่อค้นหาว่าวัตถุใดใช้พื้นที่สแต็กมากเกินไปในการค้นหาวัตถุที่ทำให้หน่วยความจำรั่วหรืออาจทำให้หน่วยความจำรั่ว