[SR-Users] Async module taking down our server

Daniel-Constantin Mierla miconda at gmail.com
Wed Jan 28 13:54:51 CET 2015


Hello,

great that it was sorted out and it was not on Kamailio side :-)

Also, glad to hear that async processing did increase capacity to handle
more concurrent calls, even it was causing troubles to other
applications ...

Cheers,
Daniel

On 28/01/15 05:40, Will Ferrer wrote:
> Hello
>
> I wanted to give an update on this.
>
> My business partner that found the issue and has been monitoring the
> problem has tracked down the issue. It turns out that the features we
> implemented using the async module were leading to more calls going on
> con currently (as they were intended to) and this was causing and
> issue with voip monitor. So the issue was not with the Async module.
>
> All the best.
>
> Will Ferrer
>
> Switchsoft
>
> On Mon, Jan 19, 2015 at 8:43 PM, Will Ferrer
> <will.ferrer at switchsoft.com <mailto:will.ferrer at switchsoft.com>> wrote:
>
>     Hi All
>
>     We are trying to use the async module to to delay sending a bye on
>     from one end of the call to the other.
>
>     We are using async_route(routename, seconds) to delay
>     the WITHINDLG route. The idea is that in the future we want to be
>     able to have our billing min duration enforced (though currently
>     we are having issues with the dialog module that we are discussing
>     in another thread).
>
>     After running this on our deploy servers, the delays before
>     sending on the byes get longer and longer, and then kamailio goes
>     down. Then the receive udp buffer fills up.
>
>     We tried it with both 4 and 400 async workers, and it made no
>     difference.
>
>     I am including a screen capture of the servers stats when this
>     happens taken from voip monitor.
>
>     Here are the relevant parts of the config:
>
>     ...
>     loadmodule "async.so"
>     ...
>     modparam("async", "workers", ASYNC_THREADS)
>     ...
>     request_route {
>     ...
>     route(DELAYED_BYE_STATIC);
>     ...
>     route[DELAYED_BYE_STATIC] {
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC");
>     #!ifdef WITH_DELAYED_BYE_STATIC
>     if (is_method("BYE")) {
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, from self \n");
>     #if (from_uri == myself) {
>     if ((allow_trusted() || allow_source_address()) && from_uri ==
>     myself) {
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, Bye detected, from self
>     \n");
>     send_reply("200", "OK");
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, sent 200 about to sleep
>     \n");
>     setflag(FLT_ACC); # do accounting ...
>     setflag(FLT_ACCFAILED); # ... even if the transaction fails
>     if (has_totag()) {
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, sleeping to
>     WITHINDLG_DELAYED \n");
>     async_route("WITHINDLG_DELAYED", MIN_DURATION);
>     } else {
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, sleeping to WITHINDLG \n");
>     async_route("WITHINDLG", MIN_DURATION);
>     }
>     xlog("L_DEBUG","route DELAYED_BYE_STATIC, slept\n");
>     exit;
>     }
>     }
>     #!endif
>     return;
>     }
>     ...
>     route[WITHINDLG_DELAYED] {
>     xlog("L_DEBUG", "route WITHINDLG_DELAYED: triggered \n");
>     $avp(was_delayed) = 1;
>     route(WITHINDLG);
>     }
>     ...
>     route[WITHINDLG] {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG triggered, request
>     method: $rm \n");
>     #!ifdef WITH_DISPATCHER
>     if(is_method("BYE|CANCEL")) {
>     xlog("L_DEBUG","route WITHINDLG:  cancel or bye detected, request
>     method: $rm \n");
>     #!ifdef WITH_DISPATCHER_LOAD_AWARE
>     xlog("L_DEBUG","route WITHINDLG: running ds_load_update, request
>     method: $rm \n");
>     ds_load_update();
>     #dlg_get ("$ci","$ft","$tt"); 
>                    #dlg_bye ("all");
>             #!endif
>     }
>     #!endif
>
>     if (has_totag() || $avp(was_delayed) == 1) {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG has totag or
>     was_delayed: $avp(was_delayed)  \n");
>     # sequential request withing a dialog should
>     # take the path determined by record-routing
>     if (loose_route()) {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG has loose route \n");
>     route(DLGURI);
>     if (is_method("BYE")) {
>     xlog("L_DEBUG","route WITHINDLG: BYE detected");
>     setflag(FLT_ACC); # do accounting ...
>     setflag(FLT_ACCFAILED); # ... even if the transaction fails
>     xlog("L_DEBUG","route WITHINDLG: ACC flag set");
>     }
>     else if ( is_method("ACK") ) {
>     # ACK is forwarded statelessy
>     route(NATMANAGE);
>     }
>     else if ( is_method("NOTIFY") ) {
>     # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
>     record_route();
>     }
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG RELAY 1\n");
>     route(RELAY);
>     } else {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG else \n");
>     if (is_method("SUBSCRIBE") && uri == myself) {
>     # in-dialog subscribe requests
>     route(PRESENCE);
>     exit;
>     }
>     if ( is_method("ACK") ) {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG is ack \n");
>     if ( t_check_trans() ) {
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG t_check_trans \n");
>     # no loose-route, but stateful ACK;
>     # must be an ACK after a 487
>     # or e.g. 404 from upstream server
>     xlog("L_DEBUG", "route WITHINDLG: will -- DLG RELAY 2\n");
>     route(RELAY);
>     exit;
>     } else {
>     # ACK without matching transaction ... ignore and discard
>     exit;
>     }
>     }
>     sl_send_reply("404","Not here");
>     }
>     exit;
>     }
>     }
>     ...
>
>
>
>     Does any one know if this is a bug or a leak with in the async
>     module, or perhaps something I am doing in my config?
>
>     Thanks in advance for an assistance you can offer me.
>
>     All the best.
>
>     Will Ferrer
>     Switchsoft
>
>
>
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150128/9ae7af1d/attachment.html>


More information about the sr-users mailing list