Site icon DBA의 정석

CORE 파일 분석 방법

Core file 분석 Tool dbx gdb을 사용하지 않고 각 OS에서 제공하는 Core File분석 툴을 사용 하여 분석하는 방법에 관하여 알아봅니다.


 


시스템 또는 사용자 별 ulimit -c(코어 파일의 설정된 크기)를 검사합니다.


        사용 가능한 사용자 디스크 공간을 검사합니다(: 디스크 할당량이 있습니까?)


        Solaris에서는 /etc/system 파일에 다음 매개변수가 있는데 이 값에 따라 코어 파일이 생성되지 않을 수 있습니다. set sys:coredumpsize=0


        Linux에서는 기본적으로 코더 덤프가 오프로 있습니다.  RedHat Advanced Server 2.1에서는 구성 정보 파일이 /etc/security에 있습니다limits.conf라는 파일에서 설정 사항을 확인할 수 있습니다. “core”라는 단어를 찾아보십시오.  0으로 설정되어 있으면 coredump를 만들 수 없습니다.


        HP OS 설정 커널 매개변수 maxdsiz(max_per_proc_data_size는 사용자 프로세스의 데이터 세그멘트 크기를 늘림) 64M에서 134M 이상으로 변경합니다.


Core File 분석 Tool


다음은 각 OS에서 사용하는 분석 툴입니다.


분석을 위해서는 statck분석 툴과 map분석 툴을 사용합니다.


    Solaris:


        stack 명령 = pstack


        map 명령 = pmap


    IBM의 추가 기능이 있는 AIX 5.2 이상(이전 버전에서는 사용할 수 없음)


        stack 명령 = procstack


        map 명령 = procmap


        참고: http://www-106.ibm.com/developerworks/eserver/articles/AIX5.2PerfTools.html


 


    Linux:


        stack = lsstack


        map = pmap


참고: http://sourceforge.net/projects/lsstack/에서 lsstack을 가져와서 Linux 플랫폼에서 빌드할 수 있습니다


이 명령은 Solarispstack에 해당합니다.


 


http://web.hexapodia.org/~adi/pmap.c에서 pmap 소스를 가져와서 Linux 플랫폼에서 빌드할 수 있습니다.


 


HPUX: 기본 제공 툴은 없으며, GDB, ADB을 사용함.


 


명령어 사용


 


각 명령어의 보다 자세한 옵션 사항은 명령어의 Help을 참조하십시오.


 


Solaris


 


/usr/bin/pstack [-F] [pid | core] > [분석내용저장파일명]


 


ex) pstack core2004-10-29 > coreStack.txt


 


/usr/bin/pmap [ -rslF ]  [ pid | core ] > [분석내용저장파일명]


 


Ex) pmap core2004-10-29 > coreMap.txt


 


 


분석


 


core ‘core’ of 20956:   /wwsl/sharedInstalls/solaris/wls70sp2/jdk131_06/bin/../bin/sparc/nativ
—————–  lwp# 14 / thread# 25  ——————–
 ff369764 __sigprocmask (ff36bf60, 0, 0, e6181d70, ff37e000, 0) + 8
 ff35e110 _sigon   (e6181d70, ff385930, 6, e6180114, e6181d70, 6) + d0
 ff361150 _thrp_kill (0, 19, 6, ff37e000, 19, ff2c0450) + f8
 ff24b900 raise    (6, 0, 0, ffffffff, ff2c03bc, 4) + 40
 ff2358ec abort    (ff2bc000, e6180268, 0, fffffff8, 4, e6180289) + 100
 fe3c68fc __1cCosFabort6Fl_v_ (1, fe4c8000, 1, e61802e8, 0, e9f90420) + b8
fe3c59f0 __1cCosbBhandle_unexpected_exception6FpnGThread_ipCpv_v_ (ff2c02ac, fe53895c, fe4dc164, fe470ab4, fe4c8000, e6180308) + 254
 fe20a8b4 JVM_handle_solaris_signal (0, 25d5b8, e6180d90, fe4c8000, b, e6181048) + 8ec
 ff36b824 __sighndlr (b, e6181048, e6180d90, fe20a8cc, e6181e14, e6181e04) + c
 ff3684d8 sigacthandler (b, e6181d70, 0, 0, 0, ff37e000) + 708
 — called from signal handler with signal 11 (SIGSEGV) —
 e9f90420 Java_HelloWorld_displayHelloWorld (25d644, e6181224, e61819b8, 0, 2, 0) + 30

 00090ae4 ???????? (e6181224, e61819b8, 25d5b8, fe4c8000, 0, 109a0)
 0008dc4c ???????? (e61812c4, ffffffff, ffffffff, 97400, 4, e61811b8)
 0008dc4c ???????? (e618135c, e61819b8, fe4c8000, 99600, c, e6181250)
 0008dc4c ???????? (e61813ec, f76a2f90, e618147c, 99600, c, e61812f8)
 0008ddb4 ???????? (e618147c, f68578b8, 0, 99974, c, e6181388)
 0008ddd8 ???????? (e618154c, e61815c8, e61815cc, 99974, 4, e6181410)


 


굵은 부분이 오류가 발생한 부분을 나타낸다. “— called from signal handler with signal을 찾으면 된다. 이 오류가 발생한 메모리 영역이e9f90420이다. coreMap.txt 파일에서 이 주소값이 포함되는 범위를 찾아본다.


E9500000   1184K read
E9680000   1392K read
E9800000   4608K read
E9F60000    136K read/write/exec
E9F90000      8K read/exec         /home/usera/wls70/solaris/projectWork/lib/libhello.so
E9FA0000      8K read/write/exec   /home/usera/wls70/solaris/projectWork/lib/libhello.so

E9FB4000      8K read/write/exec
E9FC0000    120K read/exec         /usr/lib/libelf.so.1
E9FEE000      8K read/write/exec   /usr/lib/libelf.so.1


e9f90420가 포함된 범위에서 사용되는 라이블러리는libhello.so임을 알 수 있다.


Core 발생은 주 원인은libhello.so일 가능성으로 추측할 수 있다.


 


 

 

Exit mobile version