Страница 1 из 1
Высокая загрузка процессора
Добавлено: 17 июл 2018, 16:41
SolarW
Здравствуйте.
Давненько не заходил, но вот возник вопрос и я опять с вами
Дано:
- на AWS крутится виртуалка с FreePBX Distro (Asterisk 14.7.5)
- большинство звонков ходят между SIP/... и Local/...
- получается при этом совсем неприличная загрузка проца (согласно top/htop грузит проц процесс asterisk)
- более детальное изучение проблемы с помощью perf top показало что загрузку вызывает codec_resample.so
- проверил эндпойнты, и внешние и внутренние использую ulaw кодек
- попробовал module unload codec_resample.so перестали ходить внутренние звонки с ошибкой не найден путь трансляции между SIP/... и Local/...
- дописал transcode_via_sln=no в asterisk.conf, тоже не помогло
Решил обратится к знающим людям, как можно в моём случае снизить нагрузку на CPU.
Как-то вот так это безобразие выглядит.
Re: Высокая загрузка процессора
Добавлено: 17 июл 2018, 18:26
virus_net
Четные версии Asterisk для разработчиков. Раз установили такую версию, то вам и карты в руки. Исходный код доступен.
Не являетесь разработчиком ? Тогда зачем поставили версию для разработчиков ?
Re: Высокая загрузка процессора
Добавлено: 17 июл 2018, 20:12
SolarW
virus_net писал(а):Не являетесь разработчиком ? Тогда зачем поставили версию для разработчиков ?
Был необходим ARI с командами доступными в ветке 14.
В принципе можно безболезненно переползти на 15-ю ветку - в FreePBX Distro это простой скрипт делает... Думаете поможет?
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 06:56
virus_net
Я думаю, что судя по описанию проблемы, без глубокого траблшута, который под силу разрабу, тут не обойтись.
Раз так, то мне сомнительно, что на форуме найдется кто-то кто поможет решить эту проблему "птичкой в конфиге".
Посему тут или описывать проблему на багтраке разрабов и ждать помощи от них, или переползать на другую версию, в которой, возможно, проблемы уже нет.
Вот что думаю я.
Сам не давно был в подобной ситуации, но только в роли разраба был я сам. Из-за допущенной неточности в коде программа потребляла 100% одного из ядер CPU.
Никакими изменениями в конфиге, довольно много всяческих опций, программы это не побороть. Только анализ кода помог найти и устранить неточность, которая и приводила к такому.
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 09:05
SolarW
virus_net писал(а):Я думаю, что судя по описанию проблемы, без глубокого траблшута, который под силу разрабу, тут не обойтись.
Ну может удастся получить ответ если немного упростить вопрос - можно ли как-то отказаться от транскодинга в slin при маршрутизации звонков SIP/... <-> Local/...?
Или такой транскодинг неизменяемое свойство дизайна asterisk'а?
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 09:15
gosha
у вас там sample rate для ulaw и внутри и снаружи одинаковый везде ?
но на 8 cpu и 44 каналах la > 3 и загрузка процессоров 50% какаято фигня в любом случае.
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 12:42
Zavr2008
говорите что между Local и SIP?
Local сам по себе - промежуточное звено. что там конкретно требует транскодинг из приложений?
Относительно ULAW - там четко 8000 обычно.
Где INVITE с SDP чтобы можно было понять что у Вас происходит?
И что за SIP - не chan_pjsip ли?
https://community.asterisk.org/t/high-cpu-spikes-with-pjsip-and-asterisk-13-15/71087/3
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 17:30
SolarW
gosha писал(а):у вас там sample rate для ulaw и внутри и снаружи одинаковый везде ?
Специально разный не задаю.
Везде в настройках сейчас стоит:
Дополнительных параметров (пакетизация вроде может через двоеточие задаваться?) не наблюдается.
gosha писал(а):но на 8 cpu и 44 каналах la > 3 и загрузка процессоров 50% какаято фигня в любом случае.
Вот и мне почему-то так показалось...
Уже было заподозрили что проблема в том что вызовы пишутся - но согласно iotop нагрузка на диск мизерная (изредка идет запись на скорости 100 кб/сек, такое ощущение что не постоянно пишет а просто изредка кэш сбрасывает) и в top колонка wa на нуле, т.е. проц не ждет окончания записи на диск...
Re: Высокая загрузка процессора
Добавлено: 18 июл 2018, 17:45
SolarW
Zavr2008 писал(а):говорите что между Local и SIP?
Local сам по себе - промежуточное звено. что там конкретно требует транскодинг из приложений?
Относительно ULAW - там четко 8000 обычно.
Чуть подробнее про архитектуру.
По SIP прилетают звонки от оператора и улетают на него же.
Вся коммутация ведется через stasis (ARI).
Для того, чтобы исходящие вызовы происходили по правилам маршрутизации прописанным в FreePBX из stasis'а вызовы делаются через Local/...
Т.е. таким образом может быть вызван как локальный абонент с IP-телефоном так и внешний номер.
При этом достаточно много вызовов так и пролетает транзитом - внешний звонок прилетает в stasis и после принятия решения CRM-системой куда его девать через Local/0671234567 например улетает наружу через того же оператора что и пришел в систему.
Т.е. получается один транк на оператора, на нем соответственно одни и те же настройки ulaw но из-за использования псевдо-канала Local включается принудительный транскодинг в slin.
Как написал выше отключить такое поведение не получается - попытка выгрузить codec-resample приводит к тому что звонки перестают ходить с ошибкой не найден путь транскодинга SIP -> Local
Вспомнил что есть опция transcode_via_sln, прописал ее в no - ноль реакции.
Zavr2008 писал(а):Где INVITE с SDP чтобы можно было понять что у Вас происходит?
Честно говоря пока не смотрел - но не думаю что его содержимое поможет диагностировать данную проблему.
Как видится проблема кроется именно в использовании псевдоканала Local, такое ощущение что єта сущность только и умеет что со slin работать...
Да нет, старый добрый chan_sip, освоить chan_pjsip все никак руки не доходят...
Re: Высокая загрузка процессора
Добавлено: 09 апр 2020, 17:42
SolarW
Солюшн (для гугла):
https://community.asterisk.org/t/avoid- ... nate/73610
При создании каналов использующих Local из ARI необходимо явно указывать кодек - тогда не транскодит в slin и не жрет проц.