2010년 04월 08일
리눅스 메모리 사용관련 디버깅 정보
최근에 리눅스 환경에서 메모리 사용에 관련한 문제에 직면해서 이것저것 알아낸 지식을 정리해본다.
16bit 에서 32bit 로 넘어갈때 메모리가 없어서 Hi Memory, Extended Memory, Expanded Memory 등의 기술이 생겨나던때가
불과 십몇년전 같은데, 세상 참 빠르다. 32bit 메모리가 모자라서 문제를 겪게 되다니.
앞으로 또 10년 안에 64bit address space 가 모자라는 상황을 겪게 되겠지? 상상이 안되는 구나. ㅎㅎ
- 메모리 누스 검사기 : valgrind
일종의 VM 환경에서 사용자의 프로그램을 실행시켜 각종 메모리 관련 문제를 찾아준다.
실행 속도가 좀 늦어지는게 문제이긴 한데, 쓸만한 문제점 이슈를 많이 찾아주는 고마운 툴이다. - glibc 의 hook 함수
glibc 를 쓰고 있다면 malloc(), free() 의 사용을 hooking 할수가 있다.
__malloc_hook, __free_hook 에다가 자신만의 hook 함수를 설치할수가 있다. - malloc() 의 사용 현황
glibc 를 통한 malloc() 의 활동 현황을 보고 싶으면 mallinfo() 함수를 이용하면 된다.
기타 glibc 의 memeory allocator 관련해서 많은 정보를 알고 싶으면 gnu glibc 홈피를 방문해라.
(http://www.gnu.org/s/libc/manual/html_node/Memory.html) - Google Performance Tools
glibc 의 memory allocator 성능에 만족하지 못하시는 분들은, 구글의 성능 툴을 시험해 보시라.
http://goog-perftools.sourceforge.net/ - Linux(32bit) 에서 User Process 의 메모리 사용 한계
32bit Linux 에서 한 User Process 가 쓸수 있는 메모리의 한계는 3G 이다. 1G 는 커널 영역으로 맵핑되어 있다.
특정 커널(hugemem)에서는 4G/4G 맵핑을 지원하기도 했었는데, 더이상의 패치가 나오지 않는것으로 보아 지원이 중단된듯 하다.
실행중인 프로세스의 메모리 팹핑을 보고 싶다면 "pmap -d <pid>" 를 돌려봐라.
한 프로세스에서 3G 이상의 메모리가 필요하다면 ram disk 형식으로 사용하는것을 고려해봐라. - Thread Stack
자신의 프로세스가 많은 thread 를 사용하는 방식인데, 메모리가 모자라다면 stack 설정을 확인해라.
CentOS 5의 경우 기본 stack size가 10M 인데, 이 경우 thread 를 100 개 만들면 stack 메모리에만 1G를 까먹게 된다.
16bit 에서 32bit 로 넘어갈때 메모리가 없어서 Hi Memory, Extended Memory, Expanded Memory 등의 기술이 생겨나던때가
불과 십몇년전 같은데, 세상 참 빠르다. 32bit 메모리가 모자라서 문제를 겪게 되다니.
앞으로 또 10년 안에 64bit address space 가 모자라는 상황을 겪게 되겠지? 상상이 안되는 구나. ㅎㅎ
# by | 2010/04/08 11:38 | 코드의 연금술사 | 트랙백 | 덧글(0)





