SlideShare a Scribd company logo
1 of 12
9부. 프로세스의 메모리
구조
1~2장
<실무로 배우는 시스템 성능 최적화>
아꿈사 스터디 - 정민철
텍스트
기본방향
▸메모리로 인해 일어나는 문제
▸프로세스 비정상 종료: segment fault, 메모리 부족
▸성능저하: GC 자주 발생, 캐시적중률 저하, 자주 메모리 Swap 발생
▸프로세스 메모리 확인 시 중점 체크 항목
▸사용량: 대량 메모리 사용 프로세스, 영역별 메모리 사용 구조
▸메모리 누수 여부: 시간에 따른 지속적인 증가, Full GC 후 힙 메모리
사용 지속적 증가
▸코어덤프 발생 여부: 코어덤프 발생 여부 및 이유
텍스트
프로세스 메모리 구조
▸가상 메모리 체계
▸동일 메모리 주소 범위 사용
▸다른 프로세스 메모리 침범 예방
▸Kernel Spece
▸kernel 기본 기능, 확장기능, device driver memory
▸모든 프로세스가 공유해서 사용
▸User Space
▸사용자 모드의 프로그램이 동작하는 영역
텍스트
프로세스 메모리 영역 분
류
▸ TEXT (R) : 실행코드
▸ DATA (R, R/W): 전역변수, 정적변수
▸ BSS: 초기화되지 않은 전역변수, 정
적변수
▸ HEAP (R/W): 동적 메모리 할당
▸ STACK (R/W): 함수호출 정보
텍스트
프로세스 영역별 메모리 사용량 확인
▸AIX: svmon -p [pid]
▸HP-UX: pmap [pid]
▸Solaris: pmap -x [pid]
▸Linux: cat /proc/[pid]/status
▸Windows: vmmap.exe
텍스트
LINUX PROCESS
MEMORY▸ VmPeak: 할당된 가상 메모리 최대값
▸ VmSize: 할당된 전체 가상 메모리 크기
▸ VmLck: 락된 메모리 크기
▸ VmPIN: 고정 메모리 크기(스왑 불가)
▸ VmHWM: 물리메모리 최대 할당 크기
▸ VmData: 힙 영역 크기
▸ VmRSS: 물리메모리 할당 크기
▸ VmStk: 스택 메모리 크기
▸ VmExe: 전역 변수와 실행코드 메모리 크기
▸ VmLib: 공유 라이브러리 메모리 크기
▸ VmPTE: 페이지 테이블 엔트리 크기
▸ VmSwap: 사용된 페이징 스페이스 크기
텍스트
메모리 누수 조사
▸메모리누수: 프로세스 메모리 사용량이 지속적 증가하는 현상
▸급격한 성능저하 및 다운 원인: 물리 메모리 부족으로 인한 스와핑
▸정기적으로 프로세스를 재기동해 메모리 사용량 초기화
▸원인
▸할당한 힙 메모리 미해제: malloc / new => free / delete
▸내부 캐시영역에 데이터 지속적 증가
▸free시 즉시 메모리 해제하지 않음 => 할당한 메모리 재활용 위함
▸메모리 누수는 지속적으로 증가하는 패턴을 가지고 있는지 확인 필요
텍스트
메모리 누수 조사방법
▸Windows: umdh.exe(User Mode Dump Heap) 활용
▸AIX: 메모리 디버거, probevue(메모리 추적도구) 사용
▸Solaris: 메모리 디버거, dtrace(메모리 추적도구) 사용
▸HP-UX: WDB 도구 이용
▸Linux: valgrid, heap checker 도구 이용
▸정적분석도구를 이용한 소스코드 체크
텍스트
LINUX - VALGRIND
▸에뮬레이션 환경에서 프로세스 수행해서 메모리 누수 체크
▸성능이 현저히 저하됨
▸체크방법
▸valgrind 환경에서 체크대상 프로그램 실행
$ valgrind —leak-check=full —trace-children=yes
—log-file=m%p.log [process cmd]
▸대상 프로그램 종료 => 메모리 누수 요약정보 로그 생성
텍스트
LINUX - TCMALLOC (HEAP CHECKER)
▸malloc/free function을 hooking해서 메모리 누수 모니터링
▸홈페이지: https://github.com/gperftools/gperftools
▸수행 방법
▸라이브러리 설정
1. compile 시 tcmalloc lib.을 linking해서 수행
2. compile안한 binary 실행 시 LD_PRELOAD에서 libtcmalloc.so 지정
▸HEAPPROFILE 환경변수에 로깅할 파일명 지정
▸프로그램 시작/종료
▸결과로그로 메모리 누수 확인
텍스트
텍스트

More Related Content

What's hot

FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox떠리 이
 
Cassandra education material
Cassandra education materialCassandra education material
Cassandra education materialYoungki Kim
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
알고 쓰자! HBase | Devon 2012
알고 쓰자!  HBase | Devon 2012알고 쓰자!  HBase | Devon 2012
알고 쓰자! HBase | Devon 2012Daum DNA
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개흥배 최
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기PgDay.Seoul
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.xInBum Kim
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기beom kyun choi
 
what is_tabs_share
what is_tabs_sharewhat is_tabs_share
what is_tabs_shareNAVER D2
 
CUBRIDInside_5th_CUBRID_Migration Process_DHLee
CUBRIDInside_5th_CUBRID_Migration Process_DHLeeCUBRIDInside_5th_CUBRID_Migration Process_DHLee
CUBRIDInside_5th_CUBRID_Migration Process_DHLeeLaura Oh
 
[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례NAVER D2
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차seung-hyun Park
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)InBum Kim
 
CPU Scheduling
CPU SchedulingCPU Scheduling
CPU SchedulingYERINPARK7
 

What's hot (20)

FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
Gfs Kyu
Gfs KyuGfs Kyu
Gfs Kyu
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox
 
Cassandra education material
Cassandra education materialCassandra education material
Cassandra education material
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
알고 쓰자! HBase | Devon 2012
알고 쓰자!  HBase | Devon 2012알고 쓰자!  HBase | Devon 2012
알고 쓰자! HBase | Devon 2012
 
Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개Mongodb2.2와 2.4의 신 기능 소개
Mongodb2.2와 2.4의 신 기능 소개
 
하둡관리
하둡관리하둡관리
하둡관리
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.x
 
하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기하둡 (Hadoop) 및 관련기술 훑어보기
하둡 (Hadoop) 및 관련기술 훑어보기
 
what is_tabs_share
what is_tabs_sharewhat is_tabs_share
what is_tabs_share
 
CUBRIDInside_5th_CUBRID_Migration Process_DHLee
CUBRIDInside_5th_CUBRID_Migration Process_DHLeeCUBRIDInside_5th_CUBRID_Migration Process_DHLee
CUBRIDInside_5th_CUBRID_Migration Process_DHLee
 
[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례[D2]thread dump 분석기법과 사례
[D2]thread dump 분석기법과 사례
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)
 
CPU Scheduling
CPU SchedulingCPU Scheduling
CPU Scheduling
 

Viewers also liked

Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
2014 윈도우 메모리구조
2014 윈도우 메모리구조2014 윈도우 메모리구조
2014 윈도우 메모리구조Dong-Jin Park
 
comp.org Chapter 2
comp.org Chapter 2comp.org Chapter 2
comp.org Chapter 2Rajat Sharma
 
Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdkMinchul Jung
 
서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4HyeonSeok Choi
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13Sarah Mount
 
Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)우찬 김
 
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteLibra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteJeremy Haung
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
DDD Start! - 2장 아키텍처 개요
DDD Start! - 2장 아키텍처 개요DDD Start! - 2장 아키텍처 개요
DDD Start! - 2장 아키텍처 개요Minchul Jung
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...Chanjin Park
 
Undertow 맛보기
Undertow 맛보기Undertow 맛보기
Undertow 맛보기jbugkorea
 
[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇Minchul Jung
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 

Viewers also liked (20)

Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
2014 윈도우 메모리구조
2014 윈도우 메모리구조2014 윈도우 메모리구조
2014 윈도우 메모리구조
 
comp.org Chapter 2
comp.org Chapter 2comp.org Chapter 2
comp.org Chapter 2
 
Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdk
 
서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13
 
Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)
 
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteLibra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
DDD Start! - 2장 아키텍처 개요
DDD Start! - 2장 아키텍처 개요DDD Start! - 2장 아키텍처 개요
DDD Start! - 2장 아키텍처 개요
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
 
Undertow 맛보기
Undertow 맛보기Undertow 맛보기
Undertow 맛보기
 
[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 

More from Minchul Jung

13.앙상블학습
13.앙상블학습13.앙상블학습
13.앙상블학습Minchul Jung
 
10장 진화학습
10장 진화학습10장 진화학습
10장 진화학습Minchul Jung
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Minchul Jung
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Minchul Jung
 
Apprenticeship patterns 7
Apprenticeship patterns 7Apprenticeship patterns 7
Apprenticeship patterns 7Minchul Jung
 

More from Minchul Jung (6)

13.앙상블학습
13.앙상블학습13.앙상블학습
13.앙상블학습
 
10장 진화학습
10장 진화학습10장 진화학습
10장 진화학습
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
Apprenticeship patterns 7
Apprenticeship patterns 7Apprenticeship patterns 7
Apprenticeship patterns 7
 

Ch9 프로세스의 메모리 구조

  • 1. 9부. 프로세스의 메모리 구조 1~2장 <실무로 배우는 시스템 성능 최적화> 아꿈사 스터디 - 정민철
  • 2. 텍스트 기본방향 ▸메모리로 인해 일어나는 문제 ▸프로세스 비정상 종료: segment fault, 메모리 부족 ▸성능저하: GC 자주 발생, 캐시적중률 저하, 자주 메모리 Swap 발생 ▸프로세스 메모리 확인 시 중점 체크 항목 ▸사용량: 대량 메모리 사용 프로세스, 영역별 메모리 사용 구조 ▸메모리 누수 여부: 시간에 따른 지속적인 증가, Full GC 후 힙 메모리 사용 지속적 증가 ▸코어덤프 발생 여부: 코어덤프 발생 여부 및 이유
  • 3. 텍스트 프로세스 메모리 구조 ▸가상 메모리 체계 ▸동일 메모리 주소 범위 사용 ▸다른 프로세스 메모리 침범 예방 ▸Kernel Spece ▸kernel 기본 기능, 확장기능, device driver memory ▸모든 프로세스가 공유해서 사용 ▸User Space ▸사용자 모드의 프로그램이 동작하는 영역
  • 4. 텍스트 프로세스 메모리 영역 분 류 ▸ TEXT (R) : 실행코드 ▸ DATA (R, R/W): 전역변수, 정적변수 ▸ BSS: 초기화되지 않은 전역변수, 정 적변수 ▸ HEAP (R/W): 동적 메모리 할당 ▸ STACK (R/W): 함수호출 정보
  • 5. 텍스트 프로세스 영역별 메모리 사용량 확인 ▸AIX: svmon -p [pid] ▸HP-UX: pmap [pid] ▸Solaris: pmap -x [pid] ▸Linux: cat /proc/[pid]/status ▸Windows: vmmap.exe
  • 6. 텍스트 LINUX PROCESS MEMORY▸ VmPeak: 할당된 가상 메모리 최대값 ▸ VmSize: 할당된 전체 가상 메모리 크기 ▸ VmLck: 락된 메모리 크기 ▸ VmPIN: 고정 메모리 크기(스왑 불가) ▸ VmHWM: 물리메모리 최대 할당 크기 ▸ VmData: 힙 영역 크기 ▸ VmRSS: 물리메모리 할당 크기 ▸ VmStk: 스택 메모리 크기 ▸ VmExe: 전역 변수와 실행코드 메모리 크기 ▸ VmLib: 공유 라이브러리 메모리 크기 ▸ VmPTE: 페이지 테이블 엔트리 크기 ▸ VmSwap: 사용된 페이징 스페이스 크기
  • 7. 텍스트 메모리 누수 조사 ▸메모리누수: 프로세스 메모리 사용량이 지속적 증가하는 현상 ▸급격한 성능저하 및 다운 원인: 물리 메모리 부족으로 인한 스와핑 ▸정기적으로 프로세스를 재기동해 메모리 사용량 초기화 ▸원인 ▸할당한 힙 메모리 미해제: malloc / new => free / delete ▸내부 캐시영역에 데이터 지속적 증가 ▸free시 즉시 메모리 해제하지 않음 => 할당한 메모리 재활용 위함 ▸메모리 누수는 지속적으로 증가하는 패턴을 가지고 있는지 확인 필요
  • 8. 텍스트 메모리 누수 조사방법 ▸Windows: umdh.exe(User Mode Dump Heap) 활용 ▸AIX: 메모리 디버거, probevue(메모리 추적도구) 사용 ▸Solaris: 메모리 디버거, dtrace(메모리 추적도구) 사용 ▸HP-UX: WDB 도구 이용 ▸Linux: valgrid, heap checker 도구 이용 ▸정적분석도구를 이용한 소스코드 체크
  • 9. 텍스트 LINUX - VALGRIND ▸에뮬레이션 환경에서 프로세스 수행해서 메모리 누수 체크 ▸성능이 현저히 저하됨 ▸체크방법 ▸valgrind 환경에서 체크대상 프로그램 실행 $ valgrind —leak-check=full —trace-children=yes —log-file=m%p.log [process cmd] ▸대상 프로그램 종료 => 메모리 누수 요약정보 로그 생성
  • 10. 텍스트 LINUX - TCMALLOC (HEAP CHECKER) ▸malloc/free function을 hooking해서 메모리 누수 모니터링 ▸홈페이지: https://github.com/gperftools/gperftools ▸수행 방법 ▸라이브러리 설정 1. compile 시 tcmalloc lib.을 linking해서 수행 2. compile안한 binary 실행 시 LD_PRELOAD에서 libtcmalloc.so 지정 ▸HEAPPROFILE 환경변수에 로깅할 파일명 지정 ▸프로그램 시작/종료 ▸결과로그로 메모리 누수 확인