Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ch9 프로세스의 메모리 구조

아꿈사 스터디 2016.7.23
실무로 배우는 시스템 성능 최적화
9부. 프로세스의 메모리 구조 1~2장

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

Ch9 프로세스의 메모리 구조

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

×