...
Code Block |
---|
|
profile3:
audio:
codec : opus
rate : 48000
video:
height : 180 |
Настройка транскодеров для работы в условиях больших нагрузок
При транскодинге большого количества потоков на сервере возрастает нагрузка на процессор сервера. Если процессор не успевает обрабатывать кадры всех потоков, очереди кадров на кодирование занимают оперативную память сервера (не JVM heap!). В зависимости от используемых в системе библиотек распределения памяти (malloc) это может приводить к утечкам памяти и, как следствие, к остановке сервера.
Чтобы избежать этого, предусмотрены следующие настройки, которые рекомендуется использовать совместно:
- приостановка декодирования входящих потоков, если очереди на кодирование переполнены
- использование библиотеки jemalloc
Приостановка декодирования входящих потоков
Приостановка декодирования входящих потоков дает возможность сгладить (но не ликвидировать) пиковые нагрузки на сервер, при условии выставления этих настроек для группы транскодеров, и включается при помощи следующего параметра
Code Block |
---|
|
streaming_video_decoder_wait_for_distributors=true |
Размер очереди, по достижении которого декодирование приостанавливается, задается в кадрах следующей настройкой
Code Block |
---|
|
streaming_video_decoder_wait_for_distributors_max_queue_size=3 |
Интервал ожидания освобождения очереди задается в миллисекундах
Code Block |
---|
|
streaming_video_decoder_wait_for_distributors_timeout=33 |
Использование библиотеки jemalloc для распределения памяти
По умолчанию, в большинстве случаев используется библиотека распределения памяти, входящая в состав glibc. Чтобы избежать утечек памяти под большими нагрузками, рекомендуется переключить Transcoder узлы на использование библиотеки jemalloc следующим образом (на примере Centos 7):
1. Установить компоненты, необходимые для сборки
Code Block |
---|
|
yum -y install autoconf libtool pkg-config g++ make cmake bzip |
2. Скачать исходный код библиотеки
Code Block |
---|
|
wget https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2 |
3. Распаковать архив
Code Block |
---|
|
tar -xvjf jemalloc-5.2.1.tar.bz2 |
4. Собрать библиотеку
Code Block |
---|
|
cd jemalloc-5.2.1
./configure && make && make install |
5. В файле /usr/local/FlashphonerWebCallServer/bin/setenv.sh закомментировать следующую строку
Code Block |
---|
|
export MALLOC_ARENA_MAX=4 |
и добавить следующую строку
Code Block |
---|
|
export LD_PRELOAD=/usr/local/lib/libjemalloc.so |
6. В файле настроек flashphoner.properties переключить используемый декодер на OpenH264
Code Block |
---|
|
decoder_priority=OPENH264,FF |
7. Перезапустить WCS.
Выбор маршрута для воспроизведения потока
...