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 |
---|---|---|---|
|
|
8586 |
1.3.5 |
|
|
8586 |
1.3.5 |
|
|
8586 -> 8587 |
1.5.1 |
그 외 |
|
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)
기록 경로