properties

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "env": {
    "properties": {
      ...
    }
  }
}

memoryUsage

"memoryUsage": {
  "totalUsableRatio": 100,
  "workingRatio": 60,
  "partition": "1:1"
},
totalUsableRatio (기본: 100%)

전체 시스템 메모리를 기준으로 M2 가용 메모리 비율

workingRatio (기본: 60%)

totalUsableRatio 가 반영된 메모리 중 M2가 사용할 메모리 비율

Note

기본으로 40%는 OS가 성능을 낼 수 있도록 사용하지 않는다.

partition (기본: 1:1)

M2 가용메모리 중 내부 컴포넌트 RT : Core 의 메모리 사용 분배정책

process

프로세스 역할별 개수와 메모리 가용량을 설정한다.

"process": {
  "core": {
    "memory": "auto",
    "concurrent": 0,
    "respawnable": 1,
    "keepalive": {
      "maxcount": 0,
      "maxage": "0s",
      "timewait": "1m"
    }
  },
  "transcoder": {
    "memory": "auto",
    "concurrent": 2,
    "respawnable": 1,
    "keepalive": {
      "maxage": "0s",
      "timewait": "1m"
    }
  },
  "render": {
    "memory": "auto",
    "concurrent": 4,
    "respawnable": 1,
    "keepalive": {
      "maxcount": 1000,
      "maxage": "1h",
      "timewait": "1m",
    }
  },
  "hyperdims": {
    "memory": "3G",
    "concurrent": 0,
    "keepalive": {
      "maxcount": 0,
      "maxage": "24h",
      "timewait": "60s"
    }
  },
  "rt": {
    "memory": "auto",
    "respawnable": {
      "scheduled": "03:00-04:00",
      "recovery": 0,
      "clearCoredump": false
    }
  }
}
memory

할당된 최대메모리.

  • "auto" 는 프로세스별로 잔여 메모리 또는 코어 수에 따라 자동으로 결정된다.

  • "120%"auto 기준 비율로 결정된다.

  • "1024m" 등 구체적인 숫자가 지정되면 해당 메모리를 넘지 않도록 프로세스 개수가 조정된다.

Note

auto 설정 시 각 프로세스 별로 다음과 같이 메모리 설정을 가진다.

프로세스

메모리 설정

core

  • memoryUsage 을 통해 할당된 core 메모리로 설정한다.

transcoder

  • M2 가용 메모리를 제외한 여유 메모리를 기준으로 결정한다.

  • 여유 메모리 3GB 이상일 때 2GB, 이하일 때 1GB 로 설정한다.

render

  • M2 가용 메모리를 제외한 여유 메모리를 기준으로 결정한다.

  • 여유 메모리 3GB 이상 시 1GB, 이하 시 500MB 로 설정한다.

hyperdims

  • 다음과 같은 계산식을 통해 메모리 가용량을 결정한다.

  • core 가용 메모리 - core 사용 메모리(core메모리 X core 수) + hyperdims 기본 메모리(전체 메모리 / 6)

concurrent

최대 실행 가능한 동일 프로세스 개수.

  • 0 이라면 메모리 크기에 맞추어 자동 조정된다. 최대 CPU 개수를 넘을 수 없다.

respawnable

동시 재가동되는 최대 개수. 급작스럽게 많은 프로스세가 동시에 respawnable 될 경우 성능저하 및 메모리 점유율 상승으로 이어질 수 있다.

Note

rt.respawnable 은 다른 동작체계와 설정을 제공한다. cluster 를 통해 무중단 서비스 구성이 가능하다.

  • rt.memory 설정에 의한 무중단 서비스 재가동은 cluster 활성화시에만 동작한다.

  • rt.memory (기본: auto) 설정이 auto 라면 메모리 사용량에 따른 재가동을 수행하지 않는다.

  • rt.memory 설정이 지정되어 있다면 초과시 rt.respawnable.scheduled (기본: 03:00 - 04:00) 시간 안에 1회 재가동한다.

  • rt 의 비정상 종료 상황시 rt.respawnable.recovery (기본: 0) 회 재가동한다.

  • rt.respawnable.clearCoredump (기본: false)true 라면 비정상 종료로 생성된 coredump 파일을 삭제한다.

keepalive

프로세스 생존, 재가동 조건

maxcount

지정된 개수의 트랜잭션을 처리했다면 재가동한다. 0 이라면 제한하지 않는다.

maxage

프로세스 가동시간이 지정된 시간을 초과했다면 재가동한다. 0 이라면 제한하지 않는다.

timewait

진행 중인 트랜잭션이 없다면 즉시 재가동한다. 만약 있다면 지정된 최대 시간만큼 대기한다. 시간이 초고되면 강제로 재가동한다.

Warning

재가동되는 프로세스는 concurrent 개수에 포함되지 않는다. 즉 동형의 프로세스는 keepalive.timewait 시간동안 최대 concurrent + respawnable 개수만큼 유지될 수 있다.

inspection

{
  "env": {
    "properties": {
      "inspection": {
        ...
      }
    }
  }
}

process

"process": {
  "enable": true,
  "retention": 14,
  "schedule":"5 * * * * *",
  "dir": "log/process"
},
enable (기본: true)

프로세스 모니터링 기록 활성화

retention (기본: 14)

기록 유지 갯수

schedule (기본: 5 * * * * *)

기록 스케줄

dir (기본: log/process)

기록 경로