실행중인 프로세스가 갑자기 죽으며 Core 파일이 생성
Core 파일이 계속 생성되는 경우 Disk Full로 장애 발생
Core 파일 분석 후 이슈를 해소하여 시스템 안정성 확보
Core 파일 생성을 위한 설정
1. ulimit -c unlimited
2. ulimit -a 로 확인
- 'core file size (blocks, -c) unlimited' 면 설정 완료
- 만약 core file의 size를 제한하고 싶다면 'unlimited'가 아닌 kb단위의 size를 지정해주면 된다.
분석 방법
1. debug 대상 파일 확인
프로그램이 여러개가 돌고 있는 환경이라면 특정 dump가 어떤 프로그램이 만든것인지 확인 필요
* /proc/sys/kernel/core_pattern 에서 정의된 형태로 생성
%p : pid
%u : uid
%g : gid
%s : signal number
%t : dump time(unix)
%h : hostname
%e : process
2. debugging
gdb [core발생 프로그램] [core file] |
이후, gdb interface로 화면이 전환되면서 core에 관한 간략한 정보가 뜬다.
그리고 다음의 command를 입력하면 상세한 정보를 확인하는데 도움을 준다.
- bt(back trace) : core 발생 직전의 call stack 확인
- bt full : 전체 call stack 확인
- f[스택프레임 번호] : 특정 stack 확인
- list : stack의 code 보기
- info local : stack의 수행 당시 변수 값 확인
- info arg : stack의 argument 확인
- where : 간략화
의심되는 stack frame 분석
info frame : 보다 상세한 정보 제공
stack frame at 0x : 해당 함수 sp
called by frame at 0x : 해당 함수를 호출한 함수의 SP(ex. main)
Arglist at 0x : 해당 함수가 호출하는 함수의 bp
args : 인자 정보
saved registers : rip, ebp..
(EX) (gdb) f [frame num] + (gdb) info frame
(gdb) info frame [frame num]
해당 stack의 argument/local value 확인
info frame 보다 간결하지만 인간친화적
(EX) (gdb) info arg
(gdb) info local
3. process debugging
실행중인 프로세스를 gdb로 붙어서 확인
참고
https://incredible-larva.tistory.com/entry/core-dump-%EB%B6%84%EC%84%9D%EC%9D%84-%EC%9C%84%ED%95%9C-gdb-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=hymne&logNo=221841282483