리눅스 core dump

1. core dump 란

core dump, memory dump, system dump 는 같은 의미로, 프로세스가 특정 시점에 사용 중이던 메모리 상태를 기록한 것이다.
그 외 PC, stack pointer, CPU register, 메모리 관리 정보, signal, 운영체제 plag 등 프로세스 상태도 같이 기록한다.
보통 프로세스가 비정상적으로 종료했을 때 만들어진다. 또는 명령어를 통해 현재 메모리 상태를 dump 할 수 있다.

2. 프로세스 비정상 종료 시 core dump 하도록 설정

  1. ulimit 의 core file size 가 0 인 경우 프로세스 비정상 종료 시 core dump 파일이 생성되지 않는다.
    ulimit -c unlimited 명령어로 core file sizeunlimit 로 수정하면 프로세스 비정상 종료시 core dump 파일이 생성된다.
    단, 이 명령어는 해당 터미널에서만 적용되기 때문에 모든 터미널에서 설정해 주려면
    ~/.bashrc 에 ulimit -c unlimited 를 추가해 준다.
    영구 적용을 하려면 /etc/profile 또는 /etc/security/limits.conf 를 수정해야 한다.
    생성된 core dump 파일은 프로세스가 실행된 디렉토리에 저장된다.

  2. centos 의 경우 /etc/systemd/system.conf 에 core dump 를 남기지 않도록 설정되어 있다.
    /etc/systemd/system.conf 를 vim 으로 열어
    DumpCore=yes
    DefaultLimitCORE=infinity
    를 추가해 준다.

    위 설정들은 core dump 파일 생성 시 파일의 크기에 제한을 정하지 않도록 바꾼다.
    1GB 메모리를 core dump 한 결과 파일은 10GB 이상의 크기를 가지기 때문에 설정을 바꾼 후
    디스크 용량이 모자라지 않는지 확인해야 한다.

  3. 프로세스가 crash 되어 /var/log/messages 에서 로그를 확인할 때
    Process … of user 0 killed by SIGABRT -dumping core
    Executable ‘…’ doesn’t belong to any package and ProcessUnpackaged is set to ‘no’
    ‘post-create’ on ‘/var/spool/abrt/ccpp-2021-….’ exited with 1
    Deleting problem directory ‘/var/spool/abrt/ccpp-…‘
    에러가 뜨는 경우가 있다.
    이 경우 abrt 설정을 바꿔야 한다. abrt 는 데몬 형태로 실행되고 어플리케이션에서 발생하는 크래쉬를 감지하고, 필요한 정보를 수집해서 저장한다.
    /etc/abrt/abrt-action-save-package-data.conf_ 에 아래와 같이 옵션을 수정한다.
    OpenGPGCheck=no
    ProcessUnpackaged=yes
    그리고 abrt 를 재시작한다.
    systemctl start abrtd.service
    systemctl start abrt-ccpp.service

  4. core dump 된 파일은 /var/spool/abrt 경로에 저장된다.

3. gcore 를 활용해 core dump

현재 동작 중인 프로세스의 메모리를 core dump 할 때는 gcore 명령어를 사용한다.
먼저 ps -ef 명령어로 core dump 할 프로세스의 pid 를 구한다.
gcore <프로세스의 pid> 를 실행하면 core dump 가 생성된다.
생성된 core dump 파일은 default 로 /var/spool/abrt 디렉토리에 저장된다.
core dump 파일은 gdb <프로세스 실행 경로> <core dump 파일 위치> 명령어로 실행할 수 있다.
ex) gdb /root/Desktop/proc_1 /var/spool/abrt/core.17514
실행한 후 gdb 의 디버깅 도구를 이용해 core dump 를 분석할 수 있다.