coredump는 시스템 비정상적인 종료가 발생하는 경우 커널에서 해당 프로세스와 관련 된 메모리를 덤프시키는 파일. 해당 파일을 가지고 디버깅하여 문제에 대한 원인을 찾을 수 있다.
기본적으로 대부분의 서버에서는 coredump를 남기지 않도록하는게 기본 설정이다. 예를들어 java에서 1GB의 메모리를 사용하면 coredump는 수십GB의 달하는 파일을 생성하기 때문.
1. coredump 활성화 (임시적용)
#ulimit -a
core file size (blocks, -c) 0
이처럼 가장끝의 있는 값이 0이면 coredump는 남지 않기 때문에 값 수정
#ulimit -c 1048675 (1GB로 제한)
#umlit -a
core file size (blocks, -c) 1048675
2. coredump 활성화 (영구적용)
#vi /etc/security/limits.conf
* soft core 1048675
3. coredump 설정확인
#sysctl -a | grep core
kernel.core_pattern = core
kernel.core_uses_pid = 1
#cat /proc/sys/kernel/core_pattern
core
#cat /proc/sys/kernel/core_uses_pid
1 (0일 경우 pid를 출력하지 않음)
4. coredump 분석
리눅스에서는 file 명령을 통해 코어파일에 대한 정보를 얻을 수 있다.
프로그램이 죽으면 실행파일이 있는 경로에 core.xxxx 라는 파일이 생성될 것이다. gdb를 이용하여 디버깅할 수 있다.
예를들어, core.12345라는 코어파일이 있고, 이 파일을 생성한 프로그램명을 알고 싶다면
#file core.12345
/proc/sys/kernel/core_pattern 에서 정의된 형태로 생성되며 “uyfuyfuy”이 코어파일을 생성한 프로그램 이름이라는것을 알 수 있다.
#gdb uyfuyfuy core.12345
bt(back trace) : core 발생 직전의 call stack 확인
bt full : 전체 call stack 확인
f[스택프레임 번호] : 특정 stack 확인
list : stack의 code 보기
info local : stack의 수행 당시 변수 값 확인
info arg : stack의 argument 확인
where : 간략화
quit : 종료
'Linux > Trouble shooting' 카테고리의 다른 글
서버 성능 모니터링 (0) | 2024.09.30 |
---|---|
메모리 사용률이 급증한 경우 (1) | 2024.09.30 |
리눅스 NTP 연동이 되고 있음에도 시간이 안맞는 경우 (0) | 2024.09.30 |
리눅스에서 cpu,mem 사용률 증가원인 분석방법 (0) | 2024.09.30 |
리눅스에서 NFS를 통한 NAS 마운트 시 디렉토리 소유자 정상출력방법 (0) | 2024.09.30 |