[스크랩] Crash Dump & Core File

Posted 2009. 1. 23. 17:37

출처: http://blog.naver.com/tangamjaelt?Redirect=Log&logNo=43605204

###################################################################################################

# source site : blog.naver.com/tangamjaelt

#   master : 강용운

#   email : tangamjaelt@korea.com

#   last release : 2007.10.29

###################################################################################################

 

crash dump : 시스템에 치명적인 오류가 발생하였을 경우 생성

core file : 각각의 프로세스에 오류가 발생하였을 경우 생성

 

 

1. crash dump

 

- OS에 치명적인 에러가 발생하게 되면, OS는 콘솔에 해당 메시지를 보여주며, 메모리에 있는 내용을 미리 지정한 dump device 에 crash dump를 생성하고 reboot 한다.

- dump device 는 local disk 의 swap 파티션이다.

- dump contents 는 메모리에 있는 kernel memory page 로 구성된다.

- Solaris kernel 이 데이터 무결성에 대한 문제나, H/W fault 를 만나게 되면 panic 루틴이 수행된다.

- System panic 은 메모리 정보를 dump device 에 복사하는 이벤트이다.

- crash dump 를 통해 치명적 에러에 대한 원인을 분석할 수 있다.

- dumpadm 명령을 사용하여 dump device를 구성한다.

 

- dump 시 savecore 명령이 부팅할동안 자동 실행된다.

- savecore 명령은 dump device 로부터 crash dump 를 다시 가져오는 역할을 하며, 가져온 crash dump 를 파일시스템에 쓴다.

- savecore 명령은

   - /var/crash/hostname/vmcore.X(덤프식별번호) 파일에 kernel core 정보를 둔다.

   - /var/crash/hostnmae/unix.X 파일에 namelist 와 symbol table 정보를 둔다.

 

- crash dump 디렉토리 내에 bounds 파일이 생성된다.

- bounds 파일은 다음에 저장될 dump의 앞번호를 가지고 있다.

- dumpadm 명령을 통해 dump device를 설정하고, savecore 의 디렉토리 위치를 설정한다.

dumpadm - configure operating system crash dump

# dumpadm

 

사용자 삽입 이미지








 

- Savecore enabled: yes 는 부팅 시 자동으로 savecore 명령이 구동되게 하는 설정이다.

# cat /etc/dumpadm.conf

 

사용자 삽입 이미지














 

- dumpadm 설정 파일이나 직정 수정하지 않고, dumpadm 명령을 사용하여 변경하도록 한다.

dumpadm 옵션

-y : yes. 부팅 시 savecore 명령 실행.

-n : no. 부팅 시 savecore 명령 실행 안함.

-u : update. kernel의 dump 구성을 강제적으로 /etc/dumpadm.conf 파일을 내용으로 업데이트.

-d : dump-device. 절대경로 또는 swap.

-c : contents-type. kernel, all, curproc 중 하나 선택 (curproc = kernel memory page + 현재 실행중인 프로세스의 memory page)

-r : root-dir. 기본적으로 (/)로 지정됨.

-s : savecore-dir. savecore 명령 실행 시 생성되는 파일의 디렉토리 지정. 기본적으로 /var/crash/hostname

-m : 현재 savecore-dir 에 minfree 파일을 생성.

 

 



2. core file

 

- 프로세스가 비정상적으로 종료되었을 경우 core 파일이 생성된다.

- core 파일은 프로세스에 문제가 생길 당시에 프로세스에 할당된 메모리의 snapshot 이다. (RAM → Disk)

- core 파일은 프로세스의 문제점을 분석을 하는데 사용한다.

- coreadm 명령을 사용하여 core파일의 위치와 이름을 설정한다.

 

core 파일의 종류

- global core file : mode 600 으로 생성되고, superuser 가 소유한다.

- per-process core file : mode 600 으로 생성되고, 프로세스 구동 user 가 소유한다.

 

coreadm - core file administration

 

# coreadm

 

사용자 삽입 이미지















global core file pattern :
/var/core/core.%f.%p.%u (global core 파일의 생성 위치 및 core 파일의 생성 이름 설정)

init core file pattern : core (프로세스 별로 사용하게 될 core 파일의 이름 설정)

global core dumps : disabled (global core 파일 생성 안함)

per-process core dumps : enabled (per-process core 파일 생성함)

global setid core dumps : disabled (setUID, setGID 권한으로 실행 된 프로세스에 대한 global core 파일 생성 안함)

per-process setid core dumps : disabled (setUID, setGID 권한으로 실행 된 프로세스에 대한 per-process core 파일 생성 안함)

global core dump logging : disabled (로그 안남김)

# /etc/coreadm.conf

 

사용자 삽입 이미지


















- 직접 수정하지 말고 coreadm 명령을 사용함.

- coreadm 실행 시 나타내는 항목과 같음.

coreadm 옵션

-i 패턴 : core 파일의 경로와 이름 설정  

-e 옵션 : enabled. 옵션은 global, process, global-setid, proc-setid, log 중 하나.

-d 옵션 : disabled.

-u : /etc/coreadm.conf 파일을 강제로 업데이트.

-g 패턴 : global core 파일의 경로와 이름 설정

-p 패턴 : per-process core 파일의 경로와 이름 설정

 

패턴 옵션

%p : PID

%u : effective UID

%g : effective GID

%f : 실행 파일 이름

%n : hostname (uname -n)

%m : machine name (uname -m)

%t : 시간

%% : 문자열


# coreadm -e process enable

# coreadm -g /var/core/core.%f.%p -e global

# coreadm -p $HOME/corefiles/%n.%f.%p $$ -e process ($$는 현재 PID)

# coreadm 278 3483  (특정 PID를 가지는 프로세스에 대한 core file 구성 체크)

 

사용자 삽입 이미지













# cat /etc/coreadm.conf

 

사용자 삽입 이미지












 

- file 명령으로 프로세스를 확인할 수 있다.

 

사용자 삽입 이미지