1

Тема: Как оптимизировать - liquidsoap?

На сервере идет ретрансляция более 30 радио, хочу сделать перекодировку всех радио на лету.
IceCast2 прекрасно ретранслирует все радио, но вот с liquidsoap небольшие проблемы.
Перекодировка всех радио на 32 битрейта идет хорошо, а вот больше уже не тянет(64, 128)

Конфиг liquid:

set("buffering.kind","raw")
set("log.file", true)

def my_input(url) =
    mksafe(input.хттп(buffer=5., max=20., url));
    #с или без перезаписи buffer/max одна и та же проблема
end

def outputs(name, mount, input) =
    output.icecast(
    %mp3(bitrate=32, samplerate=22050, stereo=false),
    ******
    mean(input))

    output.icecast(
    %mp3(bitrate=64,samplerate=44100,stereo=true),
    ******
    input)

    output.icecast(
    %mp3(bitrate=128,samplerate=44100,stereo=true),
    ******
    input)

end

url = "хттп://localhost:8000/radio1"
input = my_input(url)
outputs("Radio1", "radio1", input)

#..............

url = "хттп://localhost:8000/radio40"
input = my_input(url)
outputs("Radio40", "radio40", input)

Логи liquid:

2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.04s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.02s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.

Limit-ы IceCast
http://joxi.ru/4AkOaZRHjG8EAq.png

Сервер:

6 ядер(средняя загрузка 40%)
6гБ оперативки(хватет сполна)

p.s. исправьте пожалуйста лимит на кол. ссылок в посту, а то какая-то глупая проверка на слово - "хттп", хотя бы сделайте ограничения на "хттп://"

Отредактировано IceJOKER (24-07-2015 13:04:49)

2

Re: Как оптимизировать - liquidsoap?

С подобным тоже столкнулся, при даже меньшем количестве потоков. Решить не удалось, но проблема вроде бы ушла.
Из гугла - попробуйте увеличить приоритет процесса

I wonder if your system experiences CPU usage spikes from cron jobs or
something similar that causes Liquidsoap to fall behind.

Are the times when this problem happens consistent? Try setting the the CPU
priority of Liquidsoap to the max and see if that helps:

to find pid: "ps aux | grep liq:
to set priority: renice -n -19 -p <pid>

3

Re: Как оптимизировать - liquidsoap?

А что, буфер использовать не судьба?

4

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

А что, буфер использовать не судьба?

Вы о чем, коллега?

5

Re: Как оптимизировать - liquidsoap?

Да я просто не понял откуда

set("buffering.kind","raw")

, откуда Вы вобще это берете? Максимальный размер буфера для любого входного протокола - 10., задаете больше может не работать, также можно в буфер окантовать выходные потоки. Ну и зачем Вам 32 - моно - кто его слушать будет? Нагрузка и так не слабая, а тут еще какие то причуды нелепые. Вобще - не надо ходить по интернетам и искать что то, есть простая команда

liquidsoap --help

и дальше достаточно пройтись по разделам и сделать правильный конфиг.

6

Re: Как оптимизировать - liquidsoap?

А raw что в данном контексте означает?

7

Re: Как оптимизировать - liquidsoap?

Да откуда я знаю? Спрашивайте там, где нашли этот бред.

8

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

Да я просто не понял откуда

set("buffering.kind","raw")

, откуда Вы вобще это берете? Максимальный размер буфера для любого входного протокола - 10., задаете больше может не работать, также можно в буфер окантовать выходные потоки. Ну и зачем Вам 32 - моно - кто его слушать будет? Нагрузка и так не слабая, а тут еще какие то причуды нелепые. Вобще - не надо ходить по интернетам и искать что то, есть простая команда

liquidsoap --help

и дальше достаточно пройтись по разделам и сделать правильный конфиг.

Взял , если не ошибаюсь, с официального сайта, на странице оптимизации.
--help не всегда помогает, когда нет опыта, поэтому и спрашивал у людей, у которых есть опыт в этом деле.
32 моно - для слабого интернет-соединения.

9

Re: Как оптимизировать - liquidsoap?

А, нашел

set("buffering.kind","raw")

- это для древней версии - забудьте, выкиньте из конфига.

10

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

А, нашел

set("buffering.kind","raw")

- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал

11

Re: Как оптимизировать - liquidsoap?

пишет IceJOKER:

пишет gyurgin_1:

А, нашел

set("buffering.kind","raw")

- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал

А мы вас предупреждали при общении по почте, что нагрузка будет очень большой от перекодировки.

Из того, что можно посоветовать:
Делать ссылку на прослушку потока на скрипт, который будет определять количество слушателей на канале и в зависимости от этого включать нужный liquidsoap. Аналогичный скрипт ставить и на отключение слушателя.
Из минусов - долгое подключение юзера к каналу (пока скрипт сработает, пока мыло запустится)

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

12

Re: Как оптимизировать - liquidsoap?

пишет Falcon:

пишет IceJOKER:

пишет gyurgin_1:

А, нашел

set("buffering.kind","raw")

- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал

А мы вас предупреждали при общении по почте, что нагрузка будет очень большой от перекодировки.

Из того, что можно посоветовать:
Делать ссылку на прослушку потока на скрипт, который будет определять количество слушателей на канале и в зависимости от этого включать нужный liquidsoap. Аналогичный скрипт ставить и на отключение слушателя.
Из минусов - долгое подключение юзера к каналу (пока скрипт сработает, пока мыло запустится)

Такого опыта пока нет, это был первый работы с icecast и с liquidsoap, пока вижу одно легкое решение, как и порекомендовали на stackoverflow - заказать несколько мелких серверов и разделить перекодировку, чем на одном больше перекодировать все.

13

Re: Как оптимизировать - liquidsoap?

Какие сервера использовали - то? У меня в легкую получилось 40x3=120 кодировщиков поднять и еще ресурсов вагон осталось, без всяких буферов, поритом. Подозреваю что проблема у Вас в конфигурации, выкладывайте полностью - ну пароли затрите и т.д.

14

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

Какие сервера использовали - то? У меня в легкую получилось 40x3=120 кодировщиков поднять и еще ресурсов вагон осталось, без всяких буферов, поритом. Подозреваю что проблема у Вас в конфигурации, выкладывайте полностью - ну пароли затрите и т.д.

Конфиги icecast2+liquidsoap в первом посту, у icecast2 ниже просто обычный список mount-ов и ничего другого(по дефолту).

Пробовал на 3 разных серверах(виртуальных - может дело в этом?) - http://firstvds.ru/products/vds_vps_hosting - попробовал первые 3, потом еще тариф ФОРСАЖ с 6 ядрами и т.д. - максимум , что смог - это ретрансляция всех радио + перекодировка в 32 битрейта и несколько в 64, дальше уже ни в какую. нехватка CPU
хотел у fastvps.ru заказать выделенный сервер, но уже после нескольких попыток, что-то не решился. Первый опыт, поэтому не особо представляю насколько мощный сервер нужен, чтоб было норм(не нехватка и не слишком). 40 радио, ретрансляций + перекодировка в 3 битрейта(хотя бы в 2 - 32 и 128). Peak listeners = ~30 --- где-то под такие данные сервер нужен

15

Re: Как оптимизировать - liquidsoap?

По рекомендации увеличивал приоритет liquidsoap, в общем  прошелся практически по всем ссылкам Гугл , пробовал разное и увы не смог решить проблему.
Месяц назад спросил здесь, спрашивал на stackoverflow, но увы ..

16

Re: Как оптимизировать - liquidsoap?

Ну понятно, с виртуальным сервером такую задачу не решить. Если fastvps.ru - берите самый простой выделенный сервер - хватит за глаза.
По конфигу понятно, если хоть и в редких случаях, но запускались потоки с битрейтом отличным от 32, то должно быть все нормально.
Сразу тогда несколько советов:
1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.
2. input.http может отвалиться, собственно поэтому и mksafe, но бывают случаи когда на вход прилетает такое, что liquidsoap все равно падает, добавьте после входа fallback хотя бы просто на blank(), так спокойней.
3. Попадаются станции потоки которых liquidsoap попросту не примет, поверьте - такие есть, не поленитесь установить на сервер как обычный icecast для релея таких станций (каким то образом он все ставит на место и лучший вариант все входящие потоки прогнать через него) и icecast KH для раздачи слушателям, их можно поставить например один в /usr/bin/icecast, другой в /usr/local/bin/icecast, webroot можете использовать общий, какой больше нравится и все будет прекрасно работать.
4. Попробуйте поиграть с качеством перекодировки, все равно же убиваете звук, наример:
для 32 kBps

%mp3(bitrate=32,internal_quality=7,samplerate=22050,mono=true)

для 64

%mp3(bitrate=64,internal_quality=4)

для 128 оставьте по дефолту

%mp3(bitrate=128)

.
Пока вроде бы все, будут вопросы - пишите.

17

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

Ну понятно, с виртуальным сервером такую задачу не решить. Если fastvps.ru - берите самый простой выделенный сервер - хватит за глаза.
По конфигу понятно, если хоть и в редких случаях, но запускались потоки с битрейтом отличным от 32, то должно быть все нормально.
Сразу тогда несколько советов:
1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.
2. input.http может отвалиться, собственно поэтому и mksafe, но бывают случаи когда на вход прилетает такое, что liquidsoap все равно падает, добавьте после входа fallback хотя бы просто на blank(), так спокойней.
3. Попадаются станции потоки которых liquidsoap попросту не примет, поверьте - такие есть, не поленитесь установить на сервер как обычный icecast для релея таких станций (каким то образом он все ставит на место и лучший вариант все входящие потоки прогнать через него) и icecast KH для раздачи слушателям, их можно поставить например один в /usr/bin/icecast, другой в /usr/local/bin/icecast, webroot можете использовать общий, какой больше нравится и все будет прекрасно работать.
4. Попробуйте поиграть с качеством перекодировки, все равно же убиваете звук, наример:
для 32 kBps

%mp3(bitrate=32,internal_quality=7,samplerate=22050,mono=true)

для 64

%mp3(bitrate=64,internal_quality=4)

для 128 оставьте по дефолту

%mp3(bitrate=128)

.
Пока вроде бы все, будут вопросы - пишите.

Огромное спасибо, если бы кто-нибудь так ответил, то не пришлось бы столько мучиться.
Очень благодарен.
Как попробую отпишусь

18

Re: Как оптимизировать - liquidsoap?

Как можно запускать несколько копий liquidsoap на разных ядрах?
Перекодирую 6 радио в 32 и 128, процессор грузит на половину :
http://joxi.ru/RmzgNvMf5Gaq2O.png

19

Re: Как оптимизировать - liquidsoap?

Смотрите в сторону taskset, хотя мое мнение - не поможет, не тот случай.

20

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

Смотрите в сторону taskset, хотя мое мнение - не поможет, не тот случай.

а как разделить?

1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.

Выше вы писали это

Отредактировано IceJOKER (13-12-2015 12:55:00)

21

Re: Как оптимизировать - liquidsoap?

gyurgin_1, по вашему совету заказал выделенный сервер, убавил качество 32 битрейта, при перекодировке 6 радиостанций в 32 и 128 загрузка CPU ~40% - это нормально? и это при том, что в данный момент на линии несколько человек, а могут одновременно слушать 10-20 а то и 30 пользователь, не рухнет ли сервер тогда?

22

Re: Как оптимизировать - liquidsoap?

Ну я имел ввиду каждой станции дать по конфигу, Про загрузку не скажу, сначала данные сервера давайте. Слушатели то при чем? Это уже icecast, уверен - он и 100 и 1000 потянет.

23

Re: Как оптимизировать - liquidsoap?

пишет gyurgin_1:

Ну я имел ввиду каждой станции дать по конфигу, Про загрузку не скажу, сначала данные сервера давайте. Слушатели то при чем? Это уже icecast, уверен - он и 100 и 1000 потянет.

Т.е. для каждой станции создавать файл конфига - radio_first.liq, radio_second.liq .... radio_n.liq? а потом что делать? в данный момент запускаю liquidsoap командой - service liquidsoap start

IceCast то потянет, а вот liquidsoap ведь перекодирует на лету(в 32 и 128 битрейта, хотелось бы еще и 64, но пока не хочу рисковать)

Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 3400 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 800 MHz

Mem:         32060       1406      30653 

Отредактировано IceJOKER (13-12-2015 13:15:05)

24

Re: Как оптимизировать - liquidsoap?

А у Вас получается из репов к тому же liquidsoap. Что то непонятно, почему одно ядро 3400 )) Отдельный конфиг запускать просто:

/usr/bin/liquidsoap /путь к файлу конфига

, если по ядрам, давно taskset не пользовался, как то так:

taskset <битовая маска ядра> /usr/bin/liquidsoap /путь к файлу конфига

или 

taskset -c <список ядер> /usr/bin/liquidsoap /путь к файлу конфига

25

Re: Как оптимизировать - liquidsoap?

Что то непонятно, почему одно ядро 3400 ))

Это отец остальных ядер ))

При запуске через service сразу же подгружает все файлы конфигурации, к примеру сейчас у меня там:

main.liq //основные данные , которые будут подключены (include)
first_radio.liq // одно радио(в начале %include "main.liq")
other_radios.liq // остальные станции....

при перезапуске загрузились все конфигурации.


Получается нужно сначала выполнить:

service liquidsoap stop

а потом по отдельно выполнить:

/usr/bin/liquidsoap /etc/liquidsoap/first_radio.liq
/usr/bin/liquidsoap /etc/liquidsoap/other_radio.liq

я правильно понял?

Отредактировано IceJOKER (13-12-2015 14:16:18)