리눅스 환경에서 프로그래밍을 하고 서비스를 운영하다 보니
프로세스가 제대로 동작하지 않는 경우가 종종 발생합니다.
이런 경우, 제가 주로 선택하는 방식은 2가지 입니다.
1. gdb 를 프로세스에 붙인다.
gdb 의 간단한 사용은 아래 내용을 참고하세요.
2022.12.06 - [CS] - gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지
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 명령어는 설명 그대로 수행 중인 프로그램의 core file을 생성합니다.
코어덤프를 만드는 방법은 단순합니다.
$ gcore <pid>
위 명령어를 사용하면 현재 경로에 core dump 파일을 생성할 수 있습니다.
코어파일 생성 전 충분한 저장공간이 있는지 확인이 필요하니
대상 프로세스의 메모리 사용량을 고려하여 사전 공간확보를 해 두어야 합니다.
'CS' 카테고리의 다른 글
알아두면 회사에서 인정받는 리눅스 명령어, ls (0) | 2024.02.19 |
---|---|
리눅스에서 C++ 프로그래밍을 위한 gcc, g++ 의 개념과 활용 (0) | 2024.02.18 |
strace 처음 사용하기 (0) | 2023.01.18 |
gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지 (0) | 2022.12.06 |
[디자인패턴] 방문자 패턴 (Visitor pattern) 의 개념 및 구조 요약정리 (0) | 2022.10.30 |