본문 바로가기
CS

Linux 에서 프로세스의 core file(core dump) 분석

by Warehaus 2023. 7. 21.

 

 

리눅스 환경에서 프로그래밍을 하고 서비스를 운영하다 보니

프로세스가 제대로 동작하지 않는 경우가 종종 발생합니다.

 

이런 경우, 제가 주로 선택하는 방식은 2가지 입니다.

 

1. gdb 를 프로세스에 붙인다.

 

gdb 의 간단한 사용은 아래 내용을 참고하세요.

 

2022.12.06 - [CS] - gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지

 

gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지

gdb란? GDB는 GNU project의 디버거로, 실행되는 상황 또는 충돌이 발생한 프로그램에서 일어난 일들을 볼 수 있도록 한다. GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it

armin.tistory.com

 

2. core dump 를 만들고 서비스는 다시 실행한다.

 

 

뭔가 이상현상을 감지했을때, 다시 키는 것은 어떻게는 할 수 있겠지만

재발방지를 하려면 원인 분석이 필요합니다.

 

그런데, 정상적이지 않은 서비스를 그대로 두고 1번 선택지 (gdb를 붙이는 것)를 택하는 것이 쉽지가 않습니다.

어디선가 연락이 올 것 같아 조마조마 하거든요.

 

결국 2번 선택지를 택하게 되는 상황이 발생하는데

segfault 가 떨어지면 core file이 새로 생성되기는 하지만, 데드락이나 성능 지연의 경우 core file을 직접 만들어 줘야 합니다.

 

이럴 때, gcore 가 도움이 많이됩니다.

 

  gcore - Generate a core file of a running program

https://man7.org/linux/man-pages/man1/gcore.1.html

 

gcore(1) - Linux manual page

 

man7.org

 

gcore 명령어는 설명 그대로 수행 중인 프로그램의 core file을 생성합니다.

코어덤프를 만드는 방법은 단순합니다.

 

$ gcore <pid>

 

위 명령어를 사용하면 현재 경로에 core dump 파일을 생성할 수 있습니다.

 

코어파일 생성 전 충분한 저장공간이 있는지 확인이 필요하니

대상 프로세스의 메모리 사용량을 고려하여 사전 공간확보를 해 두어야 합니다.