JavaCore 파일 기반 깊이 있는 분석
Java 프로그램이 실행될 때, 때때로 JavaCore 및 HeapDump 파일이 발생하는데, 이것은 일반적으로 Java 프로그램이 치명적인 문제에 부딪힌 상황에서 발생한다.
때때로 치명적인 문제가 발생하면 자바 응용 프로그램은 죽지 않고 계속 실행될 수 있다.
그러나 때때로 치명적인 문제가 발생하면 자바 프로세스가 죽는다.
JVM은 치명적인 오류가 발생하기 전의 실행 상태를 보존하기 위해 죽기 전에 두 개의 파일을 생성합니다. 각각 JavaCore와 HeapDump 파일입니다.
어떤 차이가 있는가
JavaCore는 CPU에 관한 것이고 HeapDump 파일은 메모리에 관한 것입니다.
JavaCore 파일은 주로 Java 응용 프로그램이 어느 순간에 실행되는 위치, 즉 JVM이 실행되는 클래스, 방법, 줄에 저장됩니다.이것은 텍스트 파일입니다. 열면 모든 라인의 실행 창고를 볼 수 있으며, stacktrace로 표시됩니다.JavaCore 파일에 대한 분석을 통해 "카드"가 특정한 점, 즉 데이터베이스 조회, 장기간 응답을 얻지 못해 시스템 붕괴 등의 상황에서 너무 오래 실행되었는지 여부를 알 수 있다.
HeapDump 파일은 바이너리 파일로 어느 순간 JVM 더미에 있는 대상의 사용 상황을 저장합니다. 이 파일은 IBM Heap Analyzer 같은 도구를 분석해야 합니다.이런 파일의 가장 중요한 역할은 시스템에 메모리가 넘치는 상황이 있는지 분석하는 것이다.
어떻게 생성합니까
이 두 파일은 수동으로 생성할 수 있습니다. 시스템이 느려지거나 응답이 없을 때 수동으로 자바코어와 HeapDump 파일을 생성합니다.
Unix/Linux에서 이 두 파일을 생성하는 방법은 다음과 같습니다
# ps -ef | grep java
user 4616 4582 0 17:30 pts/0 00:00:00 grep java
root 5580 1 0 Oct27 ? 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/endorsed -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 start
# kill -3 5580
우선 자바 프로세스 id를 찾아서'kill-3 프로세스 번호'작업을 실행하고 파일이 생성된 후에 같은 작업을 한 번 하고 파일을 생성합니다.어떻게 분석합니까
JavaCore 파일
두 그룹의 파일은 JavaCore를 분석할 때 특히 효과적이다. 왜냐하면 선후 두 시간점에서 스레드가 실행되는 위치를 볼 수 있기 때문이다. 만약에 선후 두 그룹의 데이터에서 같은 스레드가 같은 위치에서 실행되는 것을 발견한다면 여기에 문제가 있을 수 있다. 왜냐하면 프로그램이 매우 빨리 실행되기 때문이다. 만약에 두 번 모두 어떤 점에 있다면 이 두 개의 파일을 분석함으로써 원인을 찾아낼 수 있다.더 나아가 문제를 해결하다.
JavaCore 파일의 머리에는 "Current Thread Details"표시가 있습니다. 이것은 JavaCore가 생성될 때 시스템이 실행하는 스레드 id를 기록하고 스레드 id를 사용하여 파일에서 스레드의 상세한 정보를 찾습니다. 이 정보에는 스레드가 어떤 종류를 실행할 때 발생하는 JavaCore가 기록되어 있습니다
NULL ------------------------------------------------------------------------
0SECTION TITLE subcomponent dump routine
NULL ===============================
1TISIGINFOOUTOFMEMORY received
1TIDATETIME Date: 2011/12/07 at 15:59:42
1TIFILENAME Javacore filename:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt
NULL ------------------------------------------------------------------------
0SECTION XHPI subcomponent dump routine
NULL ==============================
1XHTIME Wed Dec 7 15:59:42 2011
1XHSIGRECV Unexpected signal -1 received at 0x0 in <unknown>. Processing terminated.
1XHFULLVERSION J2RE 1.4.2 IBM AIX build ca142ifx-20090918 (SR13 FP2)
NULL
1XHCURRENTTHD Current Thread Details
NULL ----------------------
2XHCURRSYSTHD "WebContainer : 5" sys_thread_t:0x45FB5328
3XHNATIVESTACK Native Stack
NULL ------------
3XHSTACKLINEERR unavailable - stack address not valid
:::
:::
0SECTION XM subcomponent dump routine
NULL ============================
NULL
1XMCURTHDINFO Current Thread Details
NULL ----------------------
3XMTHREADINFO "WebContainer : 5" (TID:0x70A8E260, sys_thread_t:0x45FB5328, state:R, native ID:0x5CC0) prio=5
4XESTACKTRACE at org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString(Unknown Source)
4XESTACKTRACE at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(Unknown Source)
4XESTACKTRACE at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(Unknown Source)
4XESTACKTRACE at com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(Compiled Code))
4XESTACKTRACE at com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(Compiled Code))
4XESTACKTRACE at com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(Compiled Code))
4XESTACKTRACE at com.ibm._jsp._part._jspService(_part.java:3237)
이렇게 당시의 로그 파일을 결합하면 문제가 발생한 원인을 찾을 수 있다.그러나 이런 방법은 메모리가 넘치는 오류가 아닌 것만 찾을 수 있습니다. 코어 파일 헤더에 자바/lang/out Memory Exception의 오류가 있는지 어떤 종류로 실행되었는지 알 수 없습니다.HeapDump 파일 HeapDump 파일은 지정된 시점의 Java 스택의 스냅샷이며 미러링 파일입니다.Heap Analyzer 도구는 HeapDump 파일이 어떤 대상이 너무 많은 창고 공간을 차지하는지 분석함으로써 메모리 유출을 일으키거나 메모리 유출을 일으킬 수 있는 대상을 발견합니다.