SAP Memory Inspector 사용 방법 및 분석 방법__How to use and Analyze with SAP Memory Inspector

감귤은탱귤·2024년 11월 14일
0

SAP BC - 기본 개념

목록 보기
15/18
post-thumbnail

SAP Memory Inspector(메모리 검사기) 는 ABAP 프로그램이 실행되는 내부 세션에서 사용되는 메모리를 확인하고, 분석할 수 있게 도와주는 SAP Standard Tool 이다.

메모리 검사기를 통해서 다음과 같은 사항들을 확인할 수 있다.

  • ABAP 프로그램에서 직접적으로 사용하는 메모리 소비량
    ABAP 프로그램의 Static, Dynamic Memory Object 와 ABAP Stack 에서 사용하는 메모리를 확인할 수 있다.

  • 내부 세션 전체의 OS 단 메모리 할당량
    ABAP 메모리 소비와 ABAP Runtime 및 내부 세션 관리에서 사용하는 모든 메모리를 확인할 수 있다.

ABAP 프로그램이 사용하는 내부 세션 메모리 분석을 위해서는 Memory Inspector 과 같이 다음 항목도 확인하여 디테일한 정보를 확인할 수 있다.

  • RSMEMORY -> 상단 메뉴탭 Goto -> EM/HEAP Areas -> <사용자 세션 확인>
  • SM50 -> <ABAP 프로그램이 수행중인 Workproccess> 더블 클릭 -> Memory Statistics


1. Memory Object

1-1. Static Memory Object (정적 메모리 객체)

Static Memory Object (SMI-Static Variables) 는 소스코드 내 Data Type 선언에 의해 고정된 크기(Predefined) 가 설정된 Object 이다.

1-2. Dynamic Memory Object (동적 메모리 객체)

Dynamic Memory Object 는 프로그램이 실행될 때 크기가 변경될 수 있으므로, 메모리 관련 문제를 일으킬 가능성이 높다.

Dynamic Memory Object 에는 다음 ABAP Entity 가 포함된다.

  • Internal Tables (Row, Body)
  • Strings
  • Class Objects (CREATE OBJECT)
  • Anonymous Data Object (CREATE DATA)
  • Boxed Components

1-3. Bound Memory (바운드 메모리)

Bound Memory 는 SMI-Dominator Tree, Ranking Lists 를 참조한다.

Bound Memory 또는 Bound Storage 는 ABAP 프로그램의 특정 Entity(Class Object, Table, String 등등) 가 삭제되면 해제되는 Main Memory 이다.

Bound Storage 에는 Object 자체에서 사용하는 메모리, Object 가 참조하고 Exclusively(독점적으로) 사용하는 메모리를 포함한다.

1-4. Used Memory, Allocated Memory

ABAP 프로그램은 Internal Table과 Strings 를 연속된 메모리에 저장한다.
이러한 이유로 ABAP 프로그램은 항상 실제로 필요한 것보다 더 많은 스토리지를 이러한 Object 에 할당한다.

따라서, Internal Table 의 새 행이나 Strings 이 길어질 때, 추가 공간이 있다면 효율적으로 증가할 수 있지만, 추가 공간이 없다면 ABAP 프로그램은 Internal Table 이나 Strings 를 더 크고 연속적인 메모리 공간으로 복사한 뒤 추가를 하게 된다.

Allocated Memory(할당된 메모리) 는 일반적으로 Used Memory 보다 크며, Internal Table 이나 Strings 이 지워지거나 삭제될때 해제되는 메모리의 양을 나타낸다.

1-5. Object Cycles (SCC)

ABAP Class Object 와 Anonymous Object 는 Strongly Connected Components(SCC) 에 속할 수 있다.
이는 ABAP Class Object 와 Anonymous Object 가 다른 Object 를 참조하는 속성을 가지고 있기 때문이며, 이로 인해 강한 연결 구성요소를 형성한다.

SCC 는 잠재적인 문제점을 내포할 수 있는데, 이는 SCC 가 여러 참조로 불필요하게 많은 Memory 를 잠글 수 있기 때문이다.
따라서, 큰 SCC 를 확인했다면 프로그램 설계를 다시 한번 확인해봐야 하며, 소스코드에 불필요한 Object 에 대한 처리가 필요하다.



2. Memory Snapshot

Memory Snapshot 에는 다양한 Data Object 와 내부 세션의 메모리 소비에 대한 정보가 포함된다.

Memory Snapshot 은 XML 형식으로 AP 서버 OS 단에 저장되며, 최대 4주동안 보관된다.

Memory Snapshot 저장 위치는 프로파일 파라미터 DIR_MEMORY_INSPECTOR 에 의해 결정되며, Default 값은 다음과 같다.

  • $(DIR_DATA) = /usr/sap/<SID>/D<Instance_Number>/data

Memory Snapshot 은 OS 단에 abDbgMemory_XXX_YYYY 이름으로 저장되며, XXX 는 현재 Workproccess 번호 이고, YYYY 는 현재 Workproccess 에서 수행한 Snapshot 시퀸셜 번호이다.

OS 단에 저장되는 모든 Memory Snapshot 의 최대 크기는 프로파일 파라미터 abap/memory_inspector_files_limit_MB 로 설정할 수 있으며, 최대 크기를 초과할 시, 오래된 Memory Snapshot 부터 자동으로 삭제된다.

2-1. Create Memory Snapshot

2-1-1. 기본 방법

-> 현재 세션창 상단 메뉴탭 System
-> Utilities
-> Memory Analysis
-> Create Memory Snapshot
-> 하단에 Memory Snapshot Create 메세지 확인

2-1-2. Tcode Command 명령어

-> 현재 세션창 Tcode Command 창에 명령어 /hmusa 입력

2-1-3. Debugging (New ABAP Debugger)

-> 초기 디버깅 화면에서, 소스코드창 오른쪽 패널 중, 3번째 Replace Toole 버튼 클릭
-> Memory Management 폴더 확장
-> Memory Analysis 더블 클릭
-> 첫번째와 똑같이 창 오른쪽 패널 중, 마지막 Services of the Tool 클릭
-> Create Memory Snapshot 더블 클릭

2-1-4. ABAP Source Code

ABAP 프로그램 내부 로직 중, 특정 소스코드에 대해서 Method 를 호출해 Memory Snapshot 을 찍을 수 있다.

-> ABAP 프로그램 소스코드 중, Memory Snapshot 을 찍을 지점으로 이동
-> 해당 지점에 다음 소스코드 삽입

CALL METHOD cl_abap_memory_utilities=>
write_memory_consumption_file


3. Memory Inspector

Tcode : SMI / S_MEMORY_INSPECTOR

Memory Inspector 를 사용하여 분석을 하기 위해서는 먼저 Memory Snapshot 이 필요하다. 2-1. Create Memory Snapshot 을 참고하여 Snapshot 을 생성한다.

이 Memory Snapshot 은 다른 ABAP 프로그램 또는 다른 세션의 Snapshot 과 비교하는 것이 불가능하기 때문에, 비교를 위해서는 같은 내부 세션에서 Snapshot 을 찍어야 한다.

이렇게 생성된 Memory Snapshot 은 Memory Inspector 에서 자동으로 보이며, 해당 Snapshot 을 더블클릭하면 자동으로 이전 Snapshot 을 (T_0), 이후 Snapshot 을 (T_1) 로 선택된다.

Memory Inspector 에서 표시되는 모든 크기 단위는 Byte 이다.

3-1. Memory Inspector Section

3-1-1. Overview

개요는 ABAP 메모리의 주요 유형에 따른 프로그램의 메모리 소비를 보여준다.

SAP NW 7.4 부터는 ROLL 영역이 EM 과 통합되었으나 Memory Inspector 에서는 여전히 Roll Area 라고 나오는 경우가 있다.

  • SAP Notes 2085980 - New features in memory management as of Kernel Release 7.40

3-1-2. Dominator Tree

Dominator Tree 는 ABAP 프로그램의 Dynamic Memory Object 와 이를 참조하는 변수를 함께 보여준다.

여기서는 두 Snapshot 을 비교할 수는 없으나, 각 Memory Object 의 참조 계층에 대해서는 심도있는 분석이 가능하다.

참조된 Dynamic Memory Object 를 Keep-alive 하게 분석할 경우 사용한다.

3-1-3. Ranking List / Ranking List By Type

ABAP 프로그램의 Memory Object 크기에 따라 순위를 매긴다.
여기서는 두 Snapshot 끼리의 비교가 가능하며, 메모리를 많이 사용한 Object 부터 순서대로 나열된다.

여기서 Snapshot 간 비교를 통해 메모리 사용량의 변화는 색상과 기호로 확인할 수 있다.

  • 기존 Object 에 새로운 메모리가 할당된 경우, 빨간색으로 표시되고, 앞에 + 기호가 붙는다.
  • 기존 Object 에서 메모리가 해제되거나 삭제된 경우, 파란색으로 표시되고, 앞에 - 기호가 붙는다.

3-1-4. Table, Class, Programs

각 유형의 Memory Object 에 적합한 전용 뷰를 보여준다.
Table 뷰에서는 ABAP 프로그램에서 사용 중인 Internal Table 을 확인할 수 있으며, 각 테이블의 총 라인, 바인딩된 스토리지, 할당된 스토리지가 구분되어있다.

3-1-5. Object Cycles (SCC)

ABAP 프로그램의 Memory Object 간의 강한 연결 구성 요소(SCC) 를 보여준다.



4. Memory Inspector 를 통한 분석

프로그램 실행 전과, 실행 후 각각 Memory Snapshot 을 생성하여, 비교를 통해 대상 프로그램의 수행으로 얼만큼의 메모리가 사용되는지를 확인할 수 있다.

또한, 각 Object 별로의 분석을 통해, 어떤 Table, Strings, Instances 에서 메모리를 많이 사용하는지 체크가 가능하며,
이를 통해 다음과 같은 사항을 점검하여 개선포인트를 찾을 수도 있다.

  • 사용 후 필요가 없어진 Object 에 대하여, 메모리 해제 또는 삭제 체크
  • 필요 이상으로 과다하게 쌓이는 Internal Table 에 대해서 SQL 문 또는 로직 점검
profile
SAP BC (2019 ~ )

0개의 댓글