메모리 관련 문제에 대해 조언 부탁드려요.
글쓴이: 익명 사용자 / 작성시간: 금, 2002/11/15 - 3:28오후
레드헷 7.3에서 작업중입니다.
현재 개발중인 프로그램을 실행시키면 일정량의 메모리가 계속 소모되네
요..
sar -r 1 10000 명령으로 보면 1초에 약 8~16K 정도의 메모리가 소비되
고 있습니다.
프로그램 어딘가에 버그가 있는거 같은데. 워낙 다수의 프로세스로 이루어
져서 찾기가 힘들어요.. 소스도 여기저기 산재되어 있구요.
어떤 방법으로 이 버그를 해결할 수 있을까요? 현재 메모리를 계속 사용
하고 있는 프로세스에 대한 정보를 얻는 툴은 없나요?
많은 분들의 조언을 부탁드립니다.
Forums:
Re: 메모리 관련 문제에 대해 조언 부탁드려요.
C프로그램이라면 efence라는 라이브러리를 같이 링크해서, 컴파일 해 보세
요. (efence는 저도 테스트를 해본적이 없어서 잘 모르겠군요. man
efence 를 해보니, 된다고는 되어 있네요. ^^)
대강 보니 라이브러리 형태로 링크하면, malloc/free할때를 체크해서,
메모리 누수를 체크하는 듯 하군요. ^^;;
------------------------------------------------------------------
C++ 프로그램이라면 LeakTracer를 사용해보시구요.
http//www.andreasen.org/LeakTracer/
아래는 테스트해본 결과입니다.
================================================================
실행시 에러를 내지는 않는가?
메모리 누수 체크 => new/delete만 체크할 수 있다.
LeakCheck 스크립트에 실행파일 이름을 인자로 넣어주고 실행하면,
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ~/LeakTracer/LeakCheck ./memleak
Hello
-----------------------------------------------------------------
leak.out이라는 파일이 생성된다.
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ls
Makefile README leak.out memleak memleak.cpp memleak.o
-----------------------------------------------------------------
leak.out파일을 열어보면, 그 자체로 메모리 누수에 대한 정보를 알 수 있
다.
그리고 leak-analyze프로그램에 실행파일 이름을 인자로 넣어주면, 원인
을 알려준다.
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ~/LeakTracer/leak-analyze ./memleak
Gathered 1 (1 unique) points of data.
(gdb)
#-- Leak counted 1x / total Size 256 <== 전체 메모리 누수
량
0x80486df is in main (memleak.cpp11).
warning Source file is more recent than executable.
10 {
11 char* pchar = new char[256]; <== 메모리 누수
의 위치
-----------------------------------------------------------------
Re: 메모리 관련 문제에 대해 조언 부탁드려요.
mpatrol
valgrind
efence
등등이 모두 메모리 릭에 관한 처리를 할수 있는 디버깅 툴들입니다. 툴
을 돌려 보시면 각각의 루틴 처리시 어떠한 함수시 얼만큼의 메모리가 설
정되었는데 해제 되지 않았다던지 하는것을 금방 아실수 있을겁니다. 특
히 본인이 직접 만드신 함수들 보다는 다른 함수를 가져다 쓸때 가장 많
이 발생하는것 같습니다. 보통 인터넷에 떠도는 유틸리티 함수들을 급하
게 막 가져다 쓰다 보면 나중에 메모리릭이 그런곳에서 주루루룩~
일단 한번 돌려 보시면 팍팍 아 요녀석이었구나 하고 느끼실수 있습니다.
즐거운 하루 되세요.
댓글 달기