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,
"waitQueue": 4,
"respawnable": 1,
"keepalive": {
"maxage": "0s",
"timewait": "1m"
}
},
"render": {
"memory": "auto",
"concurrent": 4,
"waitQueue": 2
"respawnable": 1,
"keepalive": {
"maxcount": 1000,
"maxage": "1h",
"timewait": "1m",
}
},
"hyperdims": {
"memory": "3G",
"threadpool": 0,
"concurrent": 0,
"waitQueue": 4,
"pendingSameOrigin": true,
"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
함수는 동시성이concurrent
가 아닌threadpool
로 관리된다.threadpool
은 CPU 코어 수로 설정된다.hyperdims
함수의concurrent
은 0일 경우, 요청량에 따라 동적으로 관리된다.요청량이 CPU 코어 수 * 1.5 이상일 경우,
1
로 구성요청량이 CPU 코어 수 * 1 미만일 경우,
4
로 구성
waitQueue
함수 요청 동시성 개수.
m2-workman
은 최대concurrent x waitQueue
개수만큼 함수에 요청한다.함수는
concurrent
개수만큼 동시 처리하며, 나머지는 후속 동작의 신속함을 위해 대기시킨다.0
이라면 요청 개수에 제한을 두지 않는다.최대 CPU 코어 수 * 4 를 넘어설 수 없다.
Note
hyperdims
,transcoder
,render
함수는concurrent x 설정값
을 넘어서는 요청에 대해m2-workman
에서 큐잉(Queueing)한다.hyperdims
함수가504 Gateway Timeout
응답한 경우, 해당 proxy 원본 도메인은 동시성 2개로 별도 관리된다.이때 throttling
deactive
상태인 경우 해당 원본 도메인 요청시 즉시504
응답한다.이후
200 OK
응답 시 정상화되어concurrent x 설정값
에 포함되어 관리된다.
pendingSameOrigin
동일 원본 URL 요청 대기 여부.
hyperdims
함수만 해당된다.true
라면 동일 원본 URL 요청에 대해 대기한다. 응답 데이터를 공유한다.false
라면 동일 원본 URL 요청에 대해 대기하지 않는다.
Note
hyperdims
함수 처리 중 동일 원본에 대한 요청은waitQueue
큐(Queue)를 점유하지 않도록 구성한다.
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)
기록 경로