[Serusers] multiple SER instances / REGISTRATION problem

Greg Fausak greg at addaline.com
Sat Jan 17 23:34:04 CET 2004


Jiri,

I can try to reproduce the error, but I don't
remember exactly what my configuration was.  All
I remember was I tried to use multi-domain support
and I started getting memory errors.

I'll see if I can get it to break again.

I can't try until Monday, we are doing a big upgrade
this weekend.

---greg


Jiri Kuthan wrote:

> Can you please help us to find where it is. I was trying to reproduce
> the problem at iptel in the past few days but haven't seen any memory
> leaks with use of domain support.
> 
> All we would need you to do is to recompile SER with D_DBG_QM_MALLOC
> replacing F_MALLOC and setting memlog < debug in configuration file.
> SER prints lot of very detailed memory usage information on exit,
> including list of unfreed fragments.
> 
> Thanks,
> 
> -jiri
> 
> ps -- what was exactly the piece of configuration which caused the
> memory leaks?
> 
> At 11:09 PM 1/17/2004, Greg Fausak wrote:
> 
>>Yes, I think the problem persists.
>>I was able to get around it by not doing domain support in
>>registration.  I just start a separate SER process for
>>each domain.
>>
>>It has something to do with multiple domain registration.
>>
>>---greg
>>
>>
>>Jiri Kuthan wrote:
>>
>>
>>>Greg,
>>>I'm digging though serusers archives and found your report. I suppose it must have been a private memory leak and I don't remember that we closed
>>>on that. Does the problem persist? 
>>>-jiri
>>>At 05:22 AM 11/25/2003, Greg Fausak wrote:
>>>
>>>
>>>>Jiri,
>>>>
>>>>Thanks.
>>>>I made these changes (and the loadmodule domain.so) and
>>>>the server fires up fine.  However, when I send a REGISTER
>>>>now I get a message:
>>>>#
>>>>U 2003/11/24 22:16:09.124528 66.228.44.254:5060 -> 66.228.53.216:5060
>>>>SIP/2.0 500 I'm terribly sorry, server error occured (2/TM).
>>>>Via: SIP/2.0/UDP 66.228.53.216:5060.
>>>>From: <sip:123456 at named.com>.
>>>>To: <sip:123456 at named.com>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-8311.
>>>>Call-ID: D54D4F19DB874E9DA7D3354FFF6A0F68 at named.com.
>>>>CSeq: 17301 REGISTER.
>>>>Server: Sip EXpress router (0.8.12 (i386/linux)).
>>>>Content-Length: 0.
>>>>Warning: 392 66.228.44.254:5060 "Noisy feedback tells:  pid=5601 req_src_ip=66.228.44.254 req_src_port=5060 in_uri=sip:named.com out_uri=sip:named.com via_cnt==166".
>>>>
>>>>Also, in the syslog file:
>>>>Nov 24 22:16:27 sipproxy ser[5599]: ERROR: build_req_buf_from_sip_req: out of memory
>>>>Nov 24 22:16:27 sipproxy ser[5599]: ERROR: print_uac_request: no pkg_mem
>>>>Nov 24 22:16:27 sipproxy ser[5599]: ERROR: t_forward_nonack: failure to add branches
>>>>
>>>>
>>>>I remember reading a thread about this error.
>>>>Something about shared memory?
>>>>
>>>>I've got a linux 9.x system, here is the config:
>>>>
>>>>---greg
>>>>
>>>>---
>>>>#
>>>># $Id: ser.cfg,v 1.23 2003/10/13 22:51:55 jiri Exp $
>>>>#
>>>># simple quick-start config script
>>>>#
>>>>
>>>># ----------- global configuration parameters ------------------------
>>>>
>>>>debug=3         # debug level (cmd line: -dddddddddd)
>>>>fork=yes
>>>>log_stderror=no # (cmd line: -E)
>>>>
>>>>/* Uncomment these lines to enter debugging mode
>>>>fork=no
>>>>log_stderror=yes
>>>>*/
>>>>
>>>>check_via=no    # (cmd. line: -v)
>>>>dns=no           # (cmd. line: -r)
>>>>rev_dns=no      # (cmd. line: -R)
>>>>port=5060
>>>>children=4
>>>>fifo="/tmp/ser_fifo"
>>>>
>>>>alias="named.com"
>>>>alias="66.228.44.254"
>>>>
>>>># ------------------ module loading ----------------------------------
>>>>
>>>># Uncomment this if you want to use SQL database
>>>>#loadmodule "/usr/local/lib/ser/modules/mysql.so"
>>>>
>>>>loadmodule "/usr/local/lib/ser/modules/sl.so"
>>>>loadmodule "/usr/local/lib/ser/modules/tm.so"
>>>>loadmodule "/usr/local/lib/ser/modules/acc.so"
>>>>loadmodule "/usr/local/lib/ser/modules/domain.so"
>>>>loadmodule "/usr/local/lib/ser/modules/rr.so"
>>>>loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
>>>>loadmodule "/usr/local/lib/ser/modules/postgres.so"
>>>>loadmodule "/usr/local/lib/ser/modules/usrloc.so"
>>>>loadmodule "/usr/local/lib/ser/modules/group.so"
>>>>loadmodule "/usr/local/lib/ser/modules/uri.so"
>>>>loadmodule "/usr/local/lib/ser/modules/registrar.so"
>>>>loadmodule "/usr/local/lib/ser/modules/exec.so"
>>>>loadmodule "/usr/local/lib/ser/modules/auth.so"
>>>>loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>>>>loadmodule "/usr/local/lib/ser/modules/textops.so"
>>>>loadmodule "/usr/local/lib/ser/modules/xlog.so"
>>>>
>>>># ----------------- setting module-specific parameters ---------------
>>>>
>>>># -- usrloc params --
>>>>modparam("domain", "db_mode", 1)
>>>>modparam("domain", "domain_table", "domain")
>>>>modparam("domain", "domain_col", "did")
>>>>modparam("domain","db_url",
>>>>     "X")
>>>>
>>>>modparam("usrloc|group", "use_domain", 1)
>>>>
>>>>modparam("usrloc","db_mode",1)
>>>>modparam("usrloc|group|auth_db","user_column","user_id")
>>>>modparam("usrloc|uri|group|auth_db","db_url",
>>>>     "X")
>>>>
>>>>modparam("uri","subscriber_user_column","user_id")
>>>>#modparam("uri","db_url",
>>>>#       "X")
>>>>
>>>>#modparam("group","user_column","user_id")
>>>>#modparam("group","db_url",
>>>>#       "X")
>>>>
>>>>modparam("acc", "log_level", 1)
>>>>modparam("acc", "log_flag", 1 )
>>>>modparam("acc", "log_fmt", "miocfsu" )
>>>>#modparam("auth_db","user_column","user_id")
>>>>#modparam("auth_db","db_url",
>>>>#       "X")
>>>>
>>>>
>>>># -- rr params --
>>>># add value to ;lr param to make some broken UAs happy
>>>>#modparam("rr", "enable_full_lr", 1)
>>>>
>>>># -------------------------  request routing logic -------------------
>>>>
>>>># main routing logic
>>>>
>>>>route{
>>>>
>>>>     # initial sanity checks -- messages with
>>>>     # max_forwards==0, or excessively long requests
>>>>#       if (!mf_process_maxfwd_header("10")) {
>>>>#               sl_send_reply("483","Too Many Hops");
>>>>#               break;
>>>>#       };
>>>>     if (msg:len >=  max_len ) {
>>>>             sl_send_reply("513", "Message too big");
>>>>             break;
>>>>     };
>>>>
>>>>     # we record-route all messages -- to make sure that
>>>>     # subsequent messages will go through our proxy; that's
>>>>     # particularly good if upstream and downstream entities
>>>>     # use different transport protocol
>>>>     if (!method=="REGISTER") record_route();
>>>>
>>>>     # subsequent messages withing a dialog should take the
>>>>     # path determined by record-routing
>>>>     if (loose_route()) {
>>>>             # mark routing logic in request
>>>>             append_hf("P-hint: rr-enforced\r\n");
>>>>             xlog("L_WARN", "LOOSE: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>             setflag(1);
>>>>             setflag(2);
>>>>             route(1);
>>>>             break;
>>>>     };
>>>>
>>>>
>>>>#       if (!uri==myself) {
>>>>     if(!is_from_local()) {
>>>>             # mark routing logic in request
>>>>             append_hf("P-hint: outbound\r\n");
>>>>             route(1);
>>>>             break;
>>>>     };
>>>>
>>>>     # if the request is for other domain use UsrLoc
>>>>     # (in case, it does not work, use the following command
>>>>     # with proper names and addresses in it)
>>>>     if (uri==myself) {
>>>>
>>>>             if (method=="REGISTER") {
>>>>
>>>>                     if (!www_authorize("named.com", "subscriber")) {
>>>>                             www_challenge("", "0");
>>>>                             break;
>>>>                     };
>>>>
>>>>                     save("location");
>>>>                     break;
>>>>             };
>>>>
>>>>             lookup("aliases");
>>>>             if (!uri==myself) {
>>>>                     append_hf("P-hint: outbound alias\r\n");
>>>>                     route(1);
>>>>                     break;
>>>>             };
>>>>
>>>>             if (method=="INVITE" || method=="ACK") {
>>>>
>>>>                     if (!www_authorize("named.com", "subscriber")) {
>>>>                             www_challenge("", "0");
>>>>                             break;
>>>>                     };
>>>>                     xlog("L_WARN", "INVITE: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>                     #
>>>>                     if (lookup("location")) {
>>>>                             route(1);
>>>>                             break;
>>>>                     };
>>>>
>>>>                     if(uri=~"sip:[0-9]{10}@.*")
>>>>                     {
>>>>                             xlog("L_WARN", "10DIGIT: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>                             route(2);
>>>>                             break;
>>>>                     }
>>>>                     xlog("L_WARN", "UNKNOWN: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>                     sl_send_reply("580", "Sorry");
>>>>                     break;
>>>>             };
>>>>
>>>>             if (method=="CANCEL") {
>>>>
>>>>                     xlog("L_WARN", "CANCEL: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>                     route(2);
>>>>                     break;
>>>>             };
>>>>
>>>>             sl_send_reply("404", "Not Found");
>>>>             break;
>>>>     };
>>>>     xlog("L_WARN", "FAILATBOTTOM: %Ts call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru messageid:%mi\n");
>>>>     break;
>>>>}
>>>>
>>>>route[1]
>>>>{
>>>>     # send it out now; use stateful forwarding as it works reliably
>>>>     # even for UDP2TCP
>>>>     if (!t_relay()) {
>>>>             sl_reply_error();
>>>>     };
>>>>}
>>>>
>>>>route[2]
>>>>{
>>>>     consume_credentials();
>>>>     rewritehostport("65.77.154.243:5060");
>>>>     if(!t_relay()) {
>>>>             sl_reply_error();
>>>>             break;
>>>>     };
>>>>}
>>>>[root at sipproxy ser]#
>>>>
>>>>
>>>>
>>>>
>>>>Jiri Kuthan wrote:
>>>>
>>>>
>>>>
>>>>>At 12:16 AM 11/24/2003, Greg Fausak wrote:
>>>>>
>>>>>
>>>>>
>>>>>>Jiri,
>>>>>>
>>>>>>I do want to have a multi-domain capability.
>>>>>
>>>>>fragments:
>>>>># -- multi-domain
>>>>>modparam("domain", "db_mode", 1)
>>>>>modparam("usrloc|group", "use_domain", 1)
>>>>>...
>>>>>if (!is_from_local()) { # check against domain-module table
>>>>>.... /* outbound */
>>>>>break;
>>>>>};
>>>>># our domains ...
>>>>>     if (!www_authorize("", "subscriber")) {
>>>>>         # challenge if none or invalid credentials
>>>>>         www_challenge("", "0");
>>>>>         break;
>>>>>     };
>>>>>That's pretty much it, I guess. The list of served domains can be
>>>>>manipulated using serctl.
>>>>>
>>>>>
>>>>>
>>>>>>I'd also like to be able to run multiple processes
>>>>>>on the same database.  These may be different problems.
>>>>>
>>>>>Why? (I mean it sounds like a ticket for problems to me.)
>>>>>-jiri 
>>>
>>>--
>>>Jiri Kuthan            http://iptel.org/~jiri/ 
>>>.
>>
> 
> --
> Jiri Kuthan            http://iptel.org/~jiri/ 
> 
> 
> .
> 





More information about the sr-users mailing list