🐞 문제 발생

문제의 발단

미디어 서버에 2개의 방송만 송출되어도 CPU 사용률이 급증하고,

CPU 사용률이 급증함에 따라 CPU 자원을 늦게 할당받는 인코딩 및 트랜스코딩 작업의 속도가 굉장히 느려지는 것을 확인하였음

image.png

image.png

시도: 미디어 서버 멀티 프로세스 적용 (클러스터링)

목적: 인코딩 처리 및 CPU 사용률 확인 테스트 조건: 2개의 환경에서 30분씩 특이사항: 1개의 환경(Window)에서는 유튜브를 틀어놓을 예정

if (cluster.isPrimary) {
  for (let index = 1; index < os.availableParallelism(); index++) {
    cluster.fork();
  }
} else {
  const server = net.createServer((socket) => {
    console.log('running pid is: ', process.pid);
    const rtmpStream = new RTMPStream(socket);
    rtmpStream.run();
  });

  const PORT = Number(process.env.PORT) || 1935;

  server.listen(PORT, () => {
    console.log(`Media server running on port ${PORT}`);
  });
}
//ffmpeg.ts
const defaultOutputOptions = [
  '-map 0:v',
  '-map 0:a',
  '-hls_time 2',
  '-hls_list_size 3',
  '-hls_segment_type fmp4',
  '-hls_flags split_by_time+independent_segments+omit_endlist',
  '-preset ultrafast',
  '-threads 2', // << Threads
];

Pasted image 20241203022554.png

3개의 프로세스가 실행되고 서로 다른 프로세스로 할당되는 것을 확인했음