Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languageyml
themeRDark
 profile3:
  audio:
    codec : opus
    rate : 48000
  video:
    height : 180

Настройка транскодеров для работы в условиях больших нагрузок

При транскодинге большого количества потоков на сервере возрастает нагрузка на процессор сервера. Если процессор не успевает обрабатывать кадры всех потоков, очереди кадров на кодирование занимают оперативную память сервера (не JVM heap!). В зависимости от используемых в системе библиотек распределения памяти (malloc) это может приводить к утечкам памяти и, как следствие, к остановке сервера.

Чтобы избежать этого, предусмотрены следующие настройки, которые рекомендуется использовать совместно:

  • приостановка декодирования входящих потоков, если очереди на кодирование переполнены
  • использование библиотеки jemalloc

Приостановка декодирования входящих потоков

Приостановка декодирования входящих потоков дает возможность сгладить (но не ликвидировать) пиковые нагрузки на сервер, при условии выставления этих настроек для группы транскодеров, и включается при помощи следующего параметра

Code Block
themeRDark
streaming_video_decoder_wait_for_distributors=true

Размер очереди, по достижении которого декодирование приостанавливается, задается в кадрах следующей настройкой

Code Block
themeRDark
streaming_video_decoder_wait_for_distributors_max_queue_size=3

Интервал ожидания освобождения очереди задается в миллисекундах

Code Block
themeRDark
streaming_video_decoder_wait_for_distributors_timeout=33

Использование библиотеки jemalloc для распределения памяти

По умолчанию, в большинстве случаев используется библиотека распределения памяти, входящая в состав glibc. Чтобы избежать утечек памяти под большими нагрузками, рекомендуется переключить Transcoder узлы на использование библиотеки jemalloc следующим образом (на примере Centos 7):

1. Установить компоненты, необходимые для сборки

Code Block
languagebash
themeRDark
yum -y install autoconf libtool pkg-config g++ make cmake bzip

2. Скачать исходный код библиотеки

Code Block
languagebash
themeRDark
wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2

3. Распаковать архив

Code Block
languagebash
themeRDark
tar -xvjf jemalloc-5.2.1.tar.bz2

4. Собрать библиотеку

Code Block
languagebash
themeRDark
cd jemalloc-5.2.1
./configure && make && make install

5. В файле /usr/local/FlashphonerWebCallServer/bin/setenv.sh закомментировать следующую строку

Code Block
languagebash
themeRDark
export MALLOC_ARENA_MAX=4

и добавить следующую строку

Code Block
languagebash
themeRDark
export LD_PRELOAD=/usr/local/lib/libjemalloc.so

6. В файле настроек flashphoner.properties переключить используемый декодер на OpenH264

Code Block
themeRDark
decoder_priority=OPENH264,FF

7. Перезапустить WCS.

Выбор маршрута для воспроизведения потока

...