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": 3,
      "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 개수를 넘을 수 없다.

Note

  • hyperdims , transcoder , render 함수는 concurrent 를 넘어서는 요청에 대해 m2-workman 에서 큐잉(Queueing)한다.

  • hyperdims 함수가 504 Gateway Timeout 응답한 경우, 해당 proxy 원본 도메인은 동시성 2개로 별도 관리된다.

    • 이때 throttling deactive 상태인 경우 해당 원본 도메인 요청시 즉시 504 응답한다.

    • 이후 200 OK 응답 시 정상화되어 concurrent 에 포함되어 관리된다.

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 (기본: 3) 회 재가동한다.

  • rt.respawnable.recovery 값은 매일 자정(00:00)에 설정값으로 초기화되며 지정된 횟수만큼 재기동 시도한다.

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

keepalive

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

maxcount

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

maxage

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

timewait

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

Warning

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

운용 안내

함수에 따른 최적의 성능 보장을 위해 동작하는 프로세스가 다를 수 있다. 이렇게 분리된 동작에 대해 m2-workman 프로세스가 관리 책임을 갖는다.

함수

동작 프로세스

포트

Since

transcoder

  • m2-workman -> ffmpeg

8586

1.3.5

render

  • m2-workman -> chromium

8586

1.3.5

hyperdims

  • m2-workman -> m2-hyperdims

8586 -> 8587

1.5.1

그 외

  • m2c

8585

1.0.0

Note

  • m2c 는 클러스터 그룹이며 Roundrobin 방식으로 동작한다.

  • m2-workman 은 단일 프로세스이다.

프로세스 동작 예시)

# m2 status
Processes: 4 running, 0 sleeping (Respawns: 0, 0, 0)
Mem: 480MB Active, 4284MB Available

NAME            PID     UPTIME          CPU(%)  RSS(MB) HEAPTOTAL(MB)   EXTERNAL(MB)
m2m             16422   504334          4.9     232     189             13
m2c[1]          16514   504326          0.0     120     72              1
m2c[2]          16520   504326          0.0     117     70              1
m2c[3]          16526   504326          2.4     123     72              1
m2c[4]          16534   504326          0.0     119     70              1
m2-workman[5]   16536   504326          0.0     121     72              6
m2-hyperdims[6] 28296   72320           0.0     118     75              1
m2rtd           16449   504330          4.9     202     -               -
m2rtr           16463   504330          2.4     56      -               -
m2rtx           16467   504330          0.0     1       -               -
m2rty           16565   504325          0.0     1       -               -
m2rty           16566   504325          0.0     3       -               -

throttling

시스템 과부하 방지를 위한 미디어 변환과 같은 Heavy workload 동작의 쓰로틀링을 설정한다.

"throttling": {
  "hyperdims": {
    "enable": true,
    "wait": {
      "deactive": 8,
      "reactive": 6
    },
    "matchingList": null
  },
  "transcoder": {
    "enable": true,
    "wait": {
      "deactive": 4,
      "reactive": 2
    },
    "matchingList": [
      {
        "pattern": "/analyze",
        "action": "error"
      },
      {
        "pattern": "/preset/_gif2(.*)",
        "action": "origin"
      },
      {
        "pattern": "/preset/_mp42(.*)",
        "action": "origin"
      }
    ]
  }
}

Note

기본값은 위 설정과 같으며, 프로세스 별 각 항목의 기본값은 다르다.

enable

시스템 과부하 방지를 위한 쓰로틀링 사용

wait

프로세스 대기큐에 따른 쓰로틀링 제어 조건

deactive

대기큐가 process.xxx.concurrent x 설정값 이상이라면 부하를 낮추기 위해 pattern 요청을 제어한다.

Warning

체인함수의 504 Gateway Timeout 응답으로 동시성 별도 관리중인 도메인 요청이라면, 즉시 504 응답한다.

reactive

( deactive 상태에서) 대기큐가 concurrent x 설정값 미만이라면 다시 pattern 요청을 통과한다.

matchingList

조건에 따라 기능 동작 여부를 결정한다.

pattern 매칭 패턴

action 매칭된 요청에 대한 응답 정의

  • origin 원본을 응답한다.

  • redirect 원본으로 리디렉션한다.

  • error 510 상태코드를 응답한다.

    Content-Type: application/json
    
    {
      "enable": false,
      "error": "throttle"
    }
    

inspection

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

process

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

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

retention (기본: 14)

기록 유지 갯수

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

기록 스케줄

dir (기본: log/process)

기록 경로