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": 0,
    "waitQueue": 4,
    "respawnable": 1,
    "domainQueue": 0,
    "priorityCommand": ["capture", "trim"],
    "keepalive": {
      "maxage": "0s",
      "timewait": "1m"
    }
  },
  "render": {
    "memory": "auto",
    "concurrent": 4,
    "waitQueue": 2
    "respawnable": 1,
    "domainQueue": 0,
    "keepalive": {
      "maxcount": 1000,
      "maxage": "1h",
      "timewait": "1m",
    }
  },
  "hyperdims": {
    "memory": "3G",
    "threadpool": 0,
    "concurrent": 0,
    "waitQueue": 4,
    "pendingSameOrigin": true,
    "domainQueue": 0,
    "keepalive": {
      "maxcount": 0,
      "maxage": "24h",
      "timelock": "60s",
      "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
할당된 concurrent 개수에 따라 다음과 같이 결정한다.
concurrent * 1GB
render
M2 가용 메모리를 제외한 여유 메모리를 기준으로 결정한다.
여유 메모리
3GB이상 시1GB, 이하 시500MB로 설정한다.
hyperdims
다음과 같은 계산식을 통해 메모리 가용량을 결정한다.
core 가용 메모리-core 사용 메모리(core메모리 X core 수)+hyperdims 기본 메모리(전체 메모리 / 6)
concurrent최대 실행 가능한 동시성 개수.
0이라면 메모리 크기에 맞추어 자동 조정된다. 최대 CPU 개수를 넘을 수 없다.
Note
hyperdims함수에서concurrent값은 모듈 내부에서 사용하는 값으로 설정된다.hyperdims함수의concurrent은 0일 경우, 요청량에 따라 동적으로 관리된다.요청량이 CPU 코어 수 * 1.5 이상일 경우,
1로 구성요청량이 CPU 코어 수 * 1 미만일 경우,
4로 구성
transcoder함수의concurrent은 0일 경우, 여유 메모리 크기에 및 CPU 코어 수에 따라 설정된다.CPU 코어 수 / 8또는여유 메모리 크기 / 1GB중 작은 값으로 구성최소
2이상으로 구성
threadpoolhyperdims함수의 동시성 개수.0이라면 CPU 코어 수로 설정된다.hyperdims함수만 유효하며,concurrent와는 별개로 관리된다.
waitQueue함수 요청 동시성 개수.
m2-workman은 최대concurrent x waitQueue개수만큼 함수에 요청한다.함수는
concurrent개수만큼 동시 처리하며, 나머지는 후속 동작의 신속함을 위해 대기시킨다.0이라면 요청 개수에 제한을 두지 않는다.최대 CPU 코어 수 * 4 를 넘어설 수 없다.
Note
transcoder,render함수는concurrent x 설정값을 넘어서는 요청에 대해m2-workman에서 큐잉(Queueing)한다.hyperdims함수는threadpool x 설정값에 대해서 큐잉한다.hyperdims함수가504 Gateway Timeout응답한 경우, 해당 proxy 원본 도메인은 동시성 2개로 별도 관리된다.이때 throttling
deactive상태인 경우 해당 원본 도메인 요청시 즉시504응답한다.이후
200 OK응답 시 정상화되어concurrent x 설정값에 포함되어 관리된다.
pendingSameOrigin동일 원본 URL 요청 대기 여부.
hyperdims함수만 해당된다.true라면 동일 원본 URL 요청에 대해 대기한다. 응답 데이터를 공유한다.false라면 동일 원본 URL 요청에 대해 대기하지 않는다.
Note
hyperdims함수 처리 중 동일 원본에 대한 요청은waitQueue큐(Queue)를 점유하지 않도록 구성한다.
domainQueue도메인 별 요청 동시성 개수.
waitQueue x domainQueue개수만큼 요청을 처리한다.도메인 별로 요청을 큐잉(Queueing)하여 특정 도메인의 요청이 과도하게 발생하는 경우, 다른 도메인에 영향을 주지 않도록 한다.
0이라면 도메인 별 요청 큐를 사용하지 않는다.
Note
Remote 체인함수 활성화 시에는 요청 정보의 도메인 별로 큐를 관리한다.
priorityCommand우선 순위 명령어 목록
지정된 명령어는 우선 순위가 높아
waitQueue큐(Queue)를 점유하지 않고 즉시 처리된다.
Note
transcoder함수는 무거운 작업을 수행하기 때문에 비교적 가벼운capture나trim명령어에 대해 우선 순위를 높게 설정한다.
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 이라면 제한하지 않는다.
timelock프로세스가 지정된 시간동안 함수를 처리하지 않으면 재가동한다. 0 이라면 제한하지 않는다.
Note
이 설정은 프로세스가 throttling 상태일 때만 적용된다.
timewait진행 중인 트랜잭션이 없다면 즉시 재가동한다. 만약 있다면 지정된 최대 시간만큼 대기한다. 시간이 초고되면 강제로 재가동한다.
Warning
재가동되는 프로세스는 concurrent 개수에 포함되지 않는다.
즉 동형의 프로세스는 keepalive.timewait 시간동안 최대 concurrent + respawnable 개수만큼 유지될 수 있다.
Remote 프로세스 위임¶
개별 함수가 Remote 체인함수 로 구동될 수 있도록 설정한다.
"process": {
  "transcoder": {
    "delegate" : [ "1.1.1.1", "1.1.1.2"]
  },
  "hyperdims": {
    "delegate" : [ "#oci:vm:faas_hyperdims" ]
  }
}
delegate 는 함수 처리를 위임할 대상서버를 지정한다.
개별 함수단위로 구성하며, 위임( delegate )된 기능은 다른 함수설정을 참조하지 않는다.
특정 포트등을 명시하고 싶다면 아래와 같이 표현한다.
"process": {
  "hyperdims": {
    "delegate" : [ "#oci:vm:faas_hyperdims#:8080" ]
  }
}
문쟈열 치환방식으로 동작한다.
운용 안내¶
함수에 따른 최적의 성능 보장을 위해 동작하는 프로세스가 다를 수 있다.
이렇게 분리된 동작에 대해 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원본으로 리디렉션한다.error510상태코드를 응답한다.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)기록 경로