와우자 엔진 성능 최적화를 위한 기본 튜닝 방법

와우자 스트리밍 엔진의 기본 성능 튜닝 방법을 설명한다. Java Heap Size와 Garbage Collection의 역할, Processor Cores를 기준으로 한 Handler·Transport Thread Pool 계산식과 최대 권장값, 다중 VHost 운영 시 주의점, Media Cache와 MALLOC_ARENA_MAX 등 추가 최적화 항목을 함께 정리한다.

와우자 스트리밍 엔진을 튜닝해야 하는 이유

와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자)의 설치 후 주요 옵션들의 기본값은 대부분 성능보다 안정성을 위주로 셋팅된다. 이는, 초기 테스트와 디버그에는 적합하지만 실제 서비스를 제공하는 프로덕션(Production) 환경에서 운영하기는 적합하지 않다.

따라서, 성능과 관련된 옵션을 변경해 와우자가 하드웨어를 최대한 효율적으로 사용할 수 있도록 해주어야 한다. 실제로, 와우자에 기술 지원을 요청할 경우 기술 지원팀이 가장 먼저 확인하고 수정을 제안하는 부분이기도 하다.

튜닝(Tuning)이라는 단어의 느낌상 제조사 엔지니어나 전문가들만 다룰 수 있는 영역 같아 보이기도 하지만, 쉽고 간단하게 와우자의 성능을 끌어올릴 수 있는 옵션들도 있다. 본 글에서는 와우자 최적화를 위한 기본적인 튜닝 설정 항목들과, 시스템에 적절한 값을 계산하는 방법을 설명한다.

와우자 스트리밍 엔진의 기본 튜닝 항목

와우자의 웹 UI에는 Performance Tuning이라는 이름의 메뉴가 있다. 이 메뉴 안에는 와우자가 설치된 하드웨어의 성능을 최대한으로 뽑아내기 위해 최적화 설정을 할 수 있는 항목들이 위치한다.

Java Settings

와우자는 자바(Java)를 기반으로 동작하는 프로그램이다. Java Settings에서는 와우자가 사용하는 자바 메모리의 크기와 가비지 컬렉션(Java Garbage Collection)에 대한 설정을 변경할 수 있다.

와우자 스트리밍 엔진 Performance Tuning의 Java Settings 화면

Java Settings에서 살펴볼 항목은 와우자가 사용할 메모리 크기를 설정하는 Java Heap Size이다. 와우자는 시스템에 설치된 메모리 전체를 사용하는 것이 아니라 자바의 힙(Heap) 영역을 사용한다. 다시 말해, 이곳에서 설정한 자바 힙 크기가 와우자가 주로 사용하는 메모리 영역의 크기인 것이다.

와우자를 처음 설치하면 Development level 모드로 설정된다. 이것을 Production level 모드로 변경하는 것만으로도 와우자가 사용할 수 있는 메모리의 크기가 커진다. 사용할 수 있는 메모리가 커진 만큼 더 많은 작업을 안정적으로 처리할 수 있게 되고, 서버의 안정성 또한 추가적으로 확보할 수 있게 된다.

자바 메모리에 대해 익숙한 사용자라면 Custom level을 선택해 최소 512MB에서 최대 100GB까지의 범위에서 직접 힙 영역의 크기를 할당해 줄 수 있다. 하지만 과도하게 크거나 작은 값을 넣을 경우 시스템의 안정성과 성능을 저하시킨다. 때문에 적절한 값을 알지 못할 경우 Production level을 선택하기를 권한다.

Garbage Collection은 자바 프로그램이 동적으로 할당한 메모리 영역 중 더 이상 사용하지 않는 영역을 찾아 다른 용도로 사용할 수 있게 하는 기능을 수행한다. 본 글에서는 다루지 않으며, 상세한 내용은 가비지 컬렉션에 대한 공식 문서를 참고하기 바란다.

Thread Pools

Server Thread Pools은 와우자의 스레드 수를 설정하는 부분으로, 와우자가 동시에 처리할 수 있는 작업의 수에 영향을 준다. 이 부분은 시스템에 장착된 프로세서의 코어 수와 관련이 있다.

와우자 스트리밍 엔진 매니저의 Performance Tuning > Server Thread Pools 화면

보통은 프로세서 코어 수를 자동으로 감지하여 기본값이 설정되지만, 이 값이 항상 정확히 들어가지는 않는다. 특히 코어가 많은 서버용 프로세서의 경우 이런 일이 종종 발생한다. 아래의 순서를 참고해 실제 프로세서 코어 수를 확인하고, 적당한 스레드 풀 크기를 설정해 주면 되겠다.

  1. 시스템의 코어 수 확인

    와우자 UI에 접속한 후, 좌측 메뉴에서 Performance Tuning 항목을 선택한다. 와우자가 인식한 프로세서 코어의 수가 Processor Cores 항목에 표시된다.

    와우자 Performance Tuning 화면에 OS 아키텍처, 메모리, Processor Cores 12개, Java 버전과 비트 수가 표시되고 있다
    프로세서 코어 수와 Java 실행 환경 정보
  2. 스레드 수 계산

    확인된 프로세서 코어 수를 바탕으로 다음의 계산식을 사용해 Handler Thread Pool SizeTransport Thread Pool Size의 권장값을 계산해 준다.

    Handler Thread Pool Size
    60 × 프로세서 코어 수, 최대 750 권장
    Transport Thread Pool Size
    40 × 프로세서 코어 수, 최대 500 권장

    프로세서 코어의 수가 4개라면, 위의 공식에 따라 Handler Thread Pool Size의 권장값은 240, Transport Thread Pool Size의 권장값은 160이 된다.

    입력할 수 있는 스레드 수의 범위는 최소 10에서 최대 4096까지이다. 하지만 와우자의 권장값을 넘기지 않는 것이 좋다.

    스레드 수 계산식은 단일 VHost를 대상으로 한 값이다. 여러 VHost를 운영하는 경우에는 계산된 자원을 VHost별로 분배하거나, 서버 수준의 값을 공유하도록 할 수 있다.

  3. 스레드 수 변경

    와우자 UI의 Server 메뉴에서 Performance Tuning을 선택한다. 현재 설정된 Handler Thread Pool SizeTransport Thread Pool Size 값을 확인하고, 계산된 권장값과 다르다면 Edit 버튼을 클릭하여 권장값으로 변경한 후 저장한다.

추가적인 튜닝 옵션

위에서 설명한 Java SettingsThread Pools 설정을 조정하는 것만으로도 와우자의 기본적인 성능 최적화 작업은 완료했다 보아도 무방하다. 그만큼 와우자의 동작에 크게 영향을 미치는 항목들이며 기본적인 항목들이다.

이 외에도 추가적인 성능 튜닝 옵션들이 존재하며, 웹 UI에서 찾을 수 없는 튜닝 옵션들도 있다. 본 글에서는 대표적인 항목들만 소개하도록 하겠다. 상세한 내용은 와우자의 성능 튜닝에 대한 공식 문서를 참고하기 바란다.

Media Cache Tuning
VOD Edge 어플리케이션에서 미디어 캐시의 스레드와 대기 요청 크기를 조정
Virtual Host Processors
가상 호스트의 스트림 입출력 프로세스 관련 옵션
Tune virtual host ports
가상 호스트의 네트워크 포트 스레드 관련 옵션
MALLOC_ARENA_MAX
(리눅스 전용) CPU 코어당 사용할 수 있는 메모리 아레나(arena) 제한

FAQ

와우자 스트리밍 엔진의 성능 튜닝이 필요한 이유는 무엇인가?
와우자의 일부 초기 성능 설정은 개발과 시험 환경을 고려한 값으로 구성된다. 실제 서비스 환경에서는 서버의 메모리 용량, Processor Cores, Java 버전과 사용 환경에 맞게 설정을 조정해야 하드웨어 자원을 효율적으로 활용하고 메모리 부족이나 처리 지연의 가능성을 줄일 수 있다.
와우자 스트리밍 엔진은 무엇을 기반으로 동작하는가?
와우자 스트리밍 엔진은 자바(Java)를 기반으로 동작한다. 따라서 Java Heap Size와 Garbage Collection 설정은 와우자의 메모리 사용량과 운영 안정성에 영향을 준다.
Java Heap Size란 무엇인가?
Java Heap Size는 와우자가 Java 객체를 저장하고 처리하는 데 사용할 수 있는 힙 메모리의 한도이다. 와우자 프로세스의 동작에 주로 사용되는 메모리 영역이다.
와우자 스트리밍 엔진의 기본 튜닝 항목은 무엇인가?
기본적으로 Java SettingsJava Heap SizeServer Thread Pools를 먼저 확인한다. 운영 환경에 따라 Garbage Collection, Media Cache, Virtual Host Processors, Virtual Host Ports와 리눅스 트랜스코더 메모리 설정도 함께 점검할 수 있다.
Development level과 Production level의 차이는 무엇인가?
Development level은 개발과 초기 시험 환경에 적합한 Java Heap Size를 사용한다. 실제 서비스를 제공하는 환경에서는 Production level을 선택해 더 큰 힙 영역을 확보하거나, 시스템 메모리와 부하를 고려해 Custom level 값을 지정할 수 있다.
Handler Thread Pool Size는 어떻게 계산하는가?
Handler Thread Pool Size는 와우자가 인식한 Processor Cores 값에 60을 곱해 계산한다. CPU 자원 기반 튜닝에서 최대 권장값은 750이다.
Transport Thread Pool Size는 어떻게 계산하는가?
Transport Thread Pool Size는 와우자가 인식한 Processor Cores 값에 40을 곱해 계산한다. CPU 자원 기반 튜닝에서 최대 권장값은 500이다.
와우자가 인식한 CPU 코어 수는 어디에서 확인하는가?
와우자 웹 UI의 Server 메뉴에서 Performance Tuning을 선택한 후 Processor Cores 항목을 확인한다. 하이퍼스레딩이 활성화된 환경에서는 물리 코어 수가 아니라 논리 스레드 수가 반영될 수 있다.
스레드 풀 값을 반드시 수동으로 입력해야 하는가?
아니다. 일반적인 환경에서는 Set automatically를 사용해 와우자가 Processor Cores 값을 기준으로 자동 계산하도록 할 수 있다. 부하 시험이나 기술 지원을 통해 별도의 값이 필요하다고 확인된 경우에만 수동으로 조정하는 것이 좋다.
스레드 풀에 입력할 수 있는 값의 범위는 얼마인가?
Handler Thread Pool SizeTransport Thread Pool Size에는 최소 10에서 최대 4096까지 입력할 수 있다. 다만 이는 UI에서 허용하는 입력 범위이며, CPU 자원 기반 튜닝에서는 Handler 최대 750, Transport 최대 500의 권장값을 기준으로 설정하는 것이 좋다.
여러 VHost를 운영할 때도 같은 스레드 풀 계산식을 사용하는가?
계산식은 기본적으로 단일 VHost 환경을 기준으로 한다. 여러 VHost를 운영하는 경우에는 계산된 전체 스레드 자원을 VHost별로 분배하거나, 각 VHost가 서버 수준의 Handler 및 Transport 스레드 풀을 공유하도록 구성할 수 있다.
Garbage Collection이란 무엇인가?
Garbage Collection은 자바 프로그램에서 더 이상 참조하지 않는 객체를 찾아 해당 객체가 차지하던 메모리를 자동으로 회수하는 기능이다. GC 방식과 설정은 메모리 사용량과 자바 어플리케이션의 일시정지 시간에 영향을 줄 수 있다.
OutOfMemoryError란 무엇인가?
OutOfMemoryError는 실행에 필요한 메모리를 더 이상 확보하지 못할 때 발생하는 오류이다. Java Heap Size가 지나치게 작거나, 객체 참조가 계속 유지되거나, 부하에 비해 메모리가 부족한 경우 발생할 수 있다.
메모리 아레나란 무엇인가?
메모리 아레나는 리눅스의 glibc가 여러 스레드의 동적 메모리 할당을 분산해 처리하기 위해 사용하는 독립적인 메모리 관리 영역이다.

갱신 내역

  • 최초 게시
  • 수정
  • 수정 및 링크 주소 변경