Страница 1 из 1

WebRTC Asterisk падает при трафике более 40 активных звонков

Добавлено: 25 ноя 2013, 17:54
alfox84
WebRTC Asterisk падает при трафике более 40 активных звонков, если используется encryption=yes и icesupport=yes.

Сделали софтфон на WEBRTC (sipml5), все работает отлично, когда вызовов активных немного.

Но когда вызов стает более 40, то астер периодически выпадает в корку, от нескольких минут до нескольких часов.

Повторить легко, если поднять два астера, примерно с такой конфигурацией:
[trunk_72]
type=friend
host=192.168.66.161
port=5060
disallow=all
allow=alaw
context=trunk_72_in
nat=no
t38pt_udptl=no
call-limit=0
qualify=no
canreinvite=no
dtmfmode=inband
nat=force_rport,comedia
avpf=yes
encryption=yes
icesupport=yes
videosupport=no
directmedia=no
encryption=yes

и звонить с одного на другой вот на такой диалплан
007777 => {
Answer();
Wait(10);
Hangup();
};

Если сделать 200 одновременных вызовов, то астер упадет в среднем за 1 минуту.

Если отключить encryption=yes и icesupport=yes, то астер не падает.

Пробовал все версии из 11 ветки (от 11.0 до 11.6)

#0 0x00007f3fd8f93117 in destroy_tdata () from //lib/asterisk/modules/res_rtp_asterisk.so
#1 0x00007f3fd8f93f1c in pj_stun_session_destroy () from //lib/asterisk/modules/res_rtp_asterisk.so
#2 0x00007f3fd8f89c45 in destroy_ice () from //lib/asterisk/modules/res_rtp_asterisk.so
#3 0x00007f3fd8f89d6a in pj_ice_sess_destroy () from //lib/asterisk/modules/res_rtp_asterisk.so
#4 0x00007f3fd8f7e2d8 in ast_rtp_destroy (instance=<optimized out>) at res_rtp_asterisk.c:1833
#5 0x000000000054a075 in instance_destructor (obj=0x2c91478) at rtp_engine.c:212
#6 0x000000000044d716 in internal_ao2_ref (user_data=0x2c91478, delta=delta@entry=-1, file=file@entry=0x5abf96 "astobj2.c", line=line@entry=541, func=func@entry=0x5ac091 "__ao2_ref") at astobj2.c:463
#7 0x0000000000450895 in __ao2_ref (user_data=<optimized out>, delta=delta@entry=-1) at astobj2.c:541
#8 0x000000000054a6ee in ast_rtp_instance_destroy (instance=<optimized out>) at rtp_engine.c:231
#9 0x00007f3fcc43c6e5 in __sip_destroy (p=p@entry=0x2c37588, lockowner=lockowner@entry=1, lockdialoglist=lockdialoglist@entry=1) at chan_sip.c:6541
#10 0x00007f3fcc43d1d2 in sip_destroy (p=0x2c37588) at chan_sip.c:6828
#11 0x000000000044d716 in internal_ao2_ref (user_data=user_data@entry=0x2c37588, delta=delta@entry=-1, file=file@entry=0x5abf96 "astobj2.c", line=line@entry=541, func=func@entry=0x5ac091 "__ao2_ref") at astobj2.c:463
#12 0x0000000000450895 in __ao2_ref (user_data=user_data@entry=0x2c37588, delta=delta@entry=-1) at astobj2.c:541
#13 0x00007f3fcc42b5d3 in dialog_unref_debug (p=p@entry=0x2c37588, tag=tag@entry=0x7f3fcc4b8408 "The ref to a dialog passed to this sched callback is going out of scope; unref it.", file=file@entry=0x7f3fcc4a40e0 "chan_sip.c",
line=line@entry=4433, func=func@entry=0x7f3fcc4bd170 "__sip_autodestruct") at chan_sip.c:2344
#14 0x00007f3fcc48809c in __sip_autodestruct (data=0x2c37588) at chan_sip.c:4433
#15 0x0000000000570e8c in ast_sched_runq (con=0x256fec0) at sched.c:614
#16 0x00007f3fcc479856 in do_monitor (data=data@entry=0x0) at chan_sip.c:28898
#17 0x0000000000587eea in dummy_start (data=<optimized out>) at utils.c:1093
#18 0x00007f3fdc873b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#19 0x00007f3fdd655a7d in clone () from /lib/x86_64-linux-gnu/libc.so.6
#20 0x0000000000000000 in ?? ()

Всегда падает на попытке закрыть уже закрытую сессию.

Встречался ли кто с подобным и как победили, если да то как ?


PS. Баг зарепорчен в digium

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 25 ноя 2013, 21:41
Sfinx
PS. Баг зарепорчен в digium
Вот пусть они и разбираются. К сожалению текущее состояние астера не позволяет его применять даже для одного звонка по webrtc. Или используйте шлюз или копайте сами. Политика digium настолько еба#утая, что людям сейчас легче написать свою шлюз чем репортить туда баги или тем более фиксить астер ;(

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 26 ноя 2013, 19:15
ys1797
+1
А сюда ссылку на тикет не помешало бы

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 26 ноя 2013, 21:53
Sfinx
А смысл ? По трейсу виден явный race между вызовами pjsip и старого стека. В данный момент pjsip используется только для изначально отсутсвующего функциоанала типа ice/stun и т.д. Смысл в разборе architect трупа от скрещивания ужа с ежом никакого нет. Скажем так - очередной костыль сваять можно, но это врядли кому то уже интересно ;)

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 27 ноя 2013, 16:48
alfox84

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 29 ноя 2013, 17:39
alfox84
В Debian 7.0.2 походу проблема в либе libsrtp0-dev,

удалили либу, поставили последнюю версию:
git clone https://github.com/cisco/libsrtp/
cd libsrtp
CFLAGS="-fPIC" ./configure --enable-pic && make && make install

Пересобрали астер, падать перестало, но походу появились утечки памяти :)

Re: WebRTC Asterisk падает при трафике более 40 активных зво

Добавлено: 30 ноя 2013, 11:47
Sfinx
это к srtp либе отношения не имеет - race происходит когда несколько тредов пытаются некорректно работать с одним обьектом. в данном случае - выделение и особождение обьекта ice.