운영중인 서버를 gdb로 core만들고 빠지기

운영중인 서버에서 메모리 정보를 확인해야할때가 있다.
이는 gdb에서는 gcore 혹은 generate-core-file 명령을 사용하여
동작 중인 코어 파일을 생성 할 수 있는데,
이때 core를 write하는데 시간이 꽤 소요된다.

그래서 이를 최소화 하기 위해서 gdb를 위한 batch 파일과
/dev/shm을 잘 사용하면 된다.

이런식으로 하게 되면 core write하는 시간정도만 suspend되고
이후에는 운영이 정상적으로 계속 되게 된다.

1) 다음과 같이 mycore.gdb라는 파일을 만든다. (당연히 파일명은 큰 상관 없음)
cat > mycore.gdb
gcore /dev/shm/mycore.core
quit

2) gdb -x 명령을 사용하여 해당 batch를 실행한다.
gdb a.out 13054 -x mycore.gdb

설명: gdb [실행파일명] [pid] -x [batch파일명]
위처럼 수행하면 /dev/shm/mycore.core 라는 파일에 core가 생성된다.
/dev/shm을 사용하니 700 메가 가량의 코어 파일이 대략 5초 정도에 생성되었다.

3) gdb로 필요한 사항을 분석한다.
gdb a.out /dev/shm/mycore.core

*추가코멘트
– gdb로 저렇게 attach를 batch형태로 하게 되면 특정 변수 값을 세팅하고 나가거나
특정 변수 값만 찍고 나갈때 1초 언더로 해보는 것도 가능하니 여러가지로
응용하면 좋을 듯 합니다.
– 주의사항으론 shm을 사용하더라도 실제 메모리 사용량과 남은 메모리 사용량을
 고려해야 core write시에 swap으로 들어가지 않을 것입니다.
 (swap 들어가면 shm쓰는 것이 의미가 없어짐 ㅠㅠ)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다