메모리 사용정책

M2의 메모리 사용정책에 대해 기술한다.

See also

M2의 메모리사용 정책의 목표는 최대한 많은 데이터과 중간결과물을 캐싱하여 단계를 절감, 성능과 안정성을 극대화하는 것이다. 따라서 유휴시간이라도 메모리를 시스템에 반납하지 않으며 자체적으로 메모리를 관리한다.

Note

메모리 사용정책이 변경되었다면 솔루션을 재가동해야 반영된다.

M2 메모리 사용량 제한

M2가 사용하는 최대 메모리 사용량을 제한할 수 있다.

../_images/mu1.png

기본 60%의 메모리를 점유한다.

서버 인스턴스에 M2만 구동된다면 기본정책을 권장한다. 하지만 M2가 메모리를 과점유하는 다른 서버 S/W와 같은 인스턴스에서 구동되어야 한다면 M2 최대 메모리 사용량을 제한해야 한다.

Warning

시스템 메모리가 부족하면 Out Of Memory Killer 가 최대 메모리 사용량 프로세스인 M2를 죽이려 든다.

제한방식은 2가지이다.

두 옵션은 결과적으로 M2 메모리 사용량을 제한하는 것으로 같다. 하지만 개념이 달라 운영환경에 적합한 정책을 한가지 선택하여 사용할 것을 권장한다.

Note

두 옵션을 혼용하는 경우는 워크로드에 따라 메모리튜닝이 필요한 예외적인 경우이다.

옵션1 시스템 메모리 인식제한

시스템 메모리를 작게 인식하도록 구성한다.

예를 들어 16GB인스턴스에서 다른 S/W가 3GB정도를 사용해야 한다면 M2가 시스템 메모리를 13GB로 인식 하도록 한다.

{
  "env": {
    "properties": {
      "memoryUsage": {

        # 시스템 메모리 사용을 80%로 조절한다.
        "totalUsableRatio": 80
      }
    }
  }
}

위와 같이 설정하면 M2는 메모리가 12.8GB인 인스턴스에서 구동되는 것처럼 동작한다.

../_images/mu2.png

M2는 3.2GB가 처음부터 없다고 가정한다.

옵션2 프로세스 메모리 사용제한

옵션1 시스템 메모리 인식제한 와 동일한 상황에 M2가 사용 할( 인식 이 아니다.) 메모리를 제한하도록 구성한다.

{
  "env": {
    "properties": {
      "memoryUsage": {

        # 시스템 메모리 중 사용비율을
        "workingRatio": 50,
      }
    }
  }
}

위와 같이 설정하면 M2는 메모리를 시스템의 50%인 8GB만 사용한다. 결과적으로 시스템 Free가 8GB확보되어 타 S/W가 구동되더라도 문제되지 않는다.

../_images/mu3.png

M2 가용 메모리를 직접 조정한다.

M2 내부 메모리 분배

M2는 가용 메모리를 크게 rtM2-Core (이하 Core) 에 할당한다.

{
  "env": {
    "properties": {
      "memoryUsage": {

        # rt와 core가 1:1로 메모리를 나눈다.
        "partition": "1:1"
      }
    }
  }
}

Note

Core 는 함수체인에서 구동되는 확장 라이브러리의 집합이다.

license.xml 에 정의된 기능에 따라 M2-Core 메모리 배정여부를 결정한다. M2에 할당된 메모리가 10GB인 상황이라면 다음과 같이 동작한다.

  • Core 가 사용되지 않는다면 RT 에 10GB 모두 배정된다.

  • Core 가 사용된다면 RTCore 에 각각 5GB 씩 배정한다.

partition 설정을 조정하는 상황은 아래와 같다.

  • 캐싱을 더 많이하고 싶은 경우

    워크로드가 가볍고 더 많은 콘텐츠를 캐싱하는 것이 서비스에 유리하다면 RT 로 배정될 메모리 양을 늘린다.

    {
      "env": {
        "properties": {
          "memoryUsage": {
    
            # 10GB 가용량이라면 RT가 8GB, Core가 2GB를 가진다.
            "partition": "4:1"
          }
        }
      }
    }
    

    더 많이 캐싱한다는 것은 원본부하를 절감하고 디스크 I/O를 감소시킨다는 의미이기도 하다.

  • 처리성능을 향상시키고 싶은 경우

    CDN 캐싱으로 인해 HIT율을 기대할 수 없다면 Core 로 배정될 메모리 양을 늘린다.

    {
      "env": {
        "properties": {
          "memoryUsage": {
    
            # 10GB 가용량이라면 RT가 2GB, Core가 8GB를 가진다.
            "partition": "1:4"
          }
        }
      }
    }
    

    더 적게 캐싱한다는 것은 RT 의 캐싱효과가 크지 않음을 의미한다.