운영중인 서버에서 메모리 정보를 확인해야할때가 있다.
이는 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쓰는 것이 의미가 없어짐 ㅠㅠ)