3/06/2014

메모리 누수 탐지 (추후보강)

1. Memory Leak Problem 

  • 메모리관련부분 책 
  1. Memory Dump 분석과 활용 
  2. Linux 문제분석 과 해결 (개인적으로 이게 더 좋음)
     http://www.hanbit.co.kr/network/view.html?bi_id=1313

  • Application의 Memory Leak 
Application에서 Memory Leak을 쉬운방법으로 감지할수 있는 프로그램이 valgrind이며,
이를 이용하여 정확한 위치와 관련부분을 알수가 있다.

valgrind의 설치 방법과 사용법을 설명.
  http://forum.falinux.com/zbxe/index.php?document_srl=528619&mid=lecture_tip

valrind로 직접 User Manaul을 참조 
  https://valgrind.org/     


  • Linux Kernel Memory Leak 
관련내용: Documentation/kmemleak.txt

CONFIG_DEBUG_KMEMLEAK
Kernel 설정이 필요하다고 하며, 아직 나도 시도를 완벽히 못했으며, 추후 시도로를 다시하면,아래의 사이트를 이용하여 다시 진행 해볼 계획.
  http://blog.dasomoli.org/516


  • Memory 단편화 (내부,외부)
당연하겠지만, io_remap (보통 HW Address remap) 은 추적하지 못하지는 못한다.
그리고, Memory에서 단편화 외부/내부, 특히 Embbeded Linux서 문제가 많이 될지는 사실 의문이다.
이 부분은 좀 더 추후 더 자세히 알아보도록 


2. Linux Memory Management 

Linux의 경우, 기본적으로 Kernel 과 User application으로 Memory 사용하는 방법이 분리되어져 있다

  • Kmalloc과 vmalloc 사용법 및 차이
근본적으로 User malloc은 MMU를 통하여 Virtual Address 로 Page Swapping 가능하므로 관리가 다르며, 
Kernel의 경우는 DRAM기반으로 관리되어진다. 
 


Linux Kernel의 Memory Allocator 및 관련관리 부분 자료 
  https://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=11128


Linux Kernel Free 호출 (Page 기반)  

  • kmalloc API
연속되어진 Memory 요구 할 경우,  일반적으로 사용하는 경우로, 옵션도 다양.
  https://www.kernel.org/doc/htmldocs/kernel-api/API-kmalloc.html

  • vmalloc API 
불연속된 Memory를 요구할 경우, 이며, 이는  별도의 Page 관리를 요구되어지기에,
속도역시 느리다. ( vmalloc 도 내부적으로 kmalloc을 사용한다고 한다)

  • (buddy)버디 시스템
Memory를 관리하는 시스템   
  • Linux Kernel & Kernel Device Driver Programming 
  Allocating Memory, Memory
Linux 가상메모리 구조 및 관련설명 
  http://idkwim.tistory.com/54
  http://idkwim.tistory.com/55
  http://hayeol.tistory.com/entry/4%EC%9E%A5-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-1


3. OOM(Out Of Memory)이란

  • OOM (Out of Memory) 발생 원인
Linux Kernel 은 Virtual memory를 이용하여 메모리 할당을 하므로 실제 가용한 physical 메모리 보다 큰 프로그램 size의 메모리를 할당 할 수 있다.
즉 프로그램에서 당장 사용하지 않는 메모리는 나중에 메모리를 할당하기 때문에 실제 사용 가능한 메모리를 넘는 process도 load될 수 있다.(이것을 overcommit 이라 한다.)
만약 overcommit된 메모리에 실제 뭔가 쓰여지기 시작하면 메모리가 모자라므로 Out of memory가 발생한다.
  http://shadowxx.egloos.com/viewer/10781292
  http://sd0720.blogspot.kr/2012/05/outofmemoryerror.html
  http://www.kmshack.kr/405


  • 실습 환경 셋팅 및 Memory 관찰 도구 기본 실습
 Adb 연결 : Android에서 쉽게 테스트 
  • cat /proc/meminfo
  • top,
  • procrank, 
  • dumpsys meminfo pid
  http://ecogeo.tistory.com/255


4. Memory 누수탐지 및 도구

JAVA Memory
    -Java VM memory
    -Java GC (gabage collection)
    -Android GC (gabage collection)

Android Memory Management
   -dalvik 안드로이드 VM    -LMK(low memory killer)
코드레벨 메모리 누수
    -JAVA 메모리 누수는 가능한 가 ? -JAVA 메모리 부족 및 누수 패턴 사례
Memory 관찰 도구 기본 실습
    eclips 기반 - MAT


Memory 누수 사례 분석

안드로이드 기반 메모리 누수 탐지 사례 분석
    -메모리 누수 방지 프로그래밍 기법 정리

Memory 관찰 도구 심화 실습
    -예제를 통한 메모리 누수 실 사례 분석
    -누수 탐지 실습

코드레벨 메모리 누수
    -C 메모리 누수 패턴 사례   -C++ 메모리 누수 패턴 사례

Memory 관찰 도구 기본 실습
    - Linux 기반 : Valgrind
  http://bbingju.wordpress.com/2013/08/08/android-memory-leak/
  http://www.androidpub.com/1993866
  http://jetblog.tistory.com/19
  http://forum.falinux.com/zbxe/index.php?document_srl=528619&mid=lecture_tip

Android
  https://play.google.com/store/apps/details?id=com.gihasil.lab.meminfochart

Ref.
  http://mdsacademy.co.kr/academy/programs/lecture.html?uid=14387&special=N&PHPSESSID=944f2a34096b86801e2d89263e3a47b4