< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index  

Re: [reSIProcate] Memory leak when running testSpeed.cxx


I recommend using testStack instead of testSpeed for speed tests. Try
the following options if you are using popt:

testStack -r 10000 -w 100 -b 127.0.0.1 -p udp
testStack -r 10000 -w 100 -b 127.0.0.1 -p tcp

Jason



On Wed, 23 Mar 2005 15:03:04 -0800, Andy Agarwal <Andy@xxxxxxxxxxx> wrote:
> Thanks for the tip. Yes, if i make the suggested change, then i see the
> free memory climb back up and come back to what it was before the test
> within a minute or so.
> 
> andy
> 
> 
> -----Original Message-----
> From: Scott Godin [mailto:slgodin@xxxxxxxxxxxx]
> Sent: Wednesday, March 23, 2005 2:43 PM
> To: Andy Agarwal; resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> Subject: RE: [reSIProcate] Memory leak when running testSpeed.cxx
> 
> "After 20,000 calls testServer consumed 645 MB of memory and did not
> free it up even after a few minutes."
> 
> When testSpeed is waiting in the cin >> temp call it is not calling
> process on the stack.  Thus any outstanding timers will not actually be
> cleaned up.
> 
> Try modifying to stay in a process loop on both the send and recv stacks
> for a few minutes - instead of waiting in a cin >> temp call.
> 
> Also - in windows - you can also use the LEAK_CHECK define and run in
> the Debugger.  Check out WinLeakCheck.hxx to see usage.  That would help
> track down where a leak is - if there is still one.
> 
> Scott
> 
> -----Original Message-----
> From: Andy Agarwal [mailto:Andy@xxxxxxxxxxx]
> Sent: Wednesday, March 23, 2005 4:45 PM
> To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [reSIProcate] Memory leak when running testSpeed.cxx
> 
> Hi,
> 
> I got the latest version of reSIProcate today and built a Win32 Release
> version using VC++ 7.1.
> 
> I modified testSpeed.cxx slightly so i could see if there are any memory
> leaks after the test finishes running. So basically I added a -  "cin >>
> temp;"  statement before and after the loop that makes the calls. After
> 20,000 calls testServer consumed 645 MB of memory and did not free it up
> even after a few minutes.
> I searched the mailing list and did not find any recent references to
> this problem. Am I doing something wrong ?
> 
> thanks,
> anuj
> 
> **  Code from testSpeed.cxx  **
> 
>    SipStack sendStack;
>    SipStack recvStack;
>    sendStack.addTransport(UDP, 5070);
>    recvStack.addTransport(UDP, 5080);
> 
>    NameAddr dest;
>    dest.uri().scheme() = "sip";
>    dest.uri().user() = "anuj_to";
>    dest.uri().host() = "10.10.1.14"; //"agarwal.keencorp.keen.com";
>    dest.uri().port() = 5080;
>    dest.uri().param(p_transport) = "udp";
> 
>    NameAddr from = dest;
>    from.uri().port() = 5070;
>    from.uri().user() = "anuj_from";
> 
>    int totalCalls = 20000;
> 
>    bool done[100000];
>    assert( sizeof(done)/sizeof(bool) > (unsigned int)(totalCalls+1) );
>    for ( int ii=0; ii<=totalCalls; ii++ )
>    {
>       done[ii]=false;
>    }
> 
>    int lastSent=0, lastRecv=0, i=0;
> 
>    // **** Added this line to see what the memory consumption is
> initially
>    cin >> temp;
> 
>    UInt64 startTime = Timer::getTimeMs();
> 
>    while ( lastRecv < totalCalls )
>    {
>       if ( (lastRecv >= lastSent) && (lastSent <= totalCalls) )
>       {
>          Data count( ++lastSent );
>          from.uri().user() = count;
>          auto_ptr<SipMessage> message(Helper::makeInvite( dest, from,
> from));
>          sendStack.send(*message);
>       }
> 
>       FdSet fdset;
>       sendStack.buildFdSet(fdset);
>       recvStack.buildFdSet(fdset);
>       int err = fdset.selectMilliSeconds(0);
>       assert (err != -1);
> 
>       sendStack.process(fdset);
>       recvStack.process(fdset);
> 
>       auto_ptr<SipMessage> received1(sendStack.receive());
>       if (received1.get())
>       {
>          int user = atoi( received1->header(h_From).uri().user().c_str()
> );
> 
>          if ( (received1->isResponse()) )
>          {
>             if ( received1->header(h_StatusLine).responseCode() == 200 )
>             {
>                if ( !done[user] )
>                {
>                   done[user]=true;
> 
>                   DeprecatedDialog dlog(from);
>                   dlog.createDialogAsUAC(*received1);
>                   auto_ptr<SipMessage> ack(dlog.makeAck(*received1) );
>                   auto_ptr<SipMessage> bye(dlog.makeBye());
>                   sendStack.send(*ack);
>                   sendStack.send(*bye);
>                }
>                else
>                {
>                   if ( user > lastRecv )
>                   {
>                      lastRecv = user;
>                   }
>                }
>             }
>          }
>       }
> 
>       auto_ptr<SipMessage> received2(recvStack.receive());
>       if (received2.get())
>       {
>          MethodTypes meth =
> received2->header(h_RequestLine).getMethod();
> 
>          if ( meth == INVITE )
>          {
>             auto_ptr<SipMessage> msg180(Helper::makeResponse(*received2,
> 180, dest, "Ringing"));
>             recvStack.send( *msg180);
>             auto_ptr<SipMessage> msg200(Helper::makeResponse(*received2,
> 200, dest, "OK"));
>             recvStack.send(*msg200);
>          }
> 
>          if ( meth == BYE )
>          {
>             auto_ptr<SipMessage> msg200(Helper::makeResponse(*received2,
> 200, dest, "OK"));
>             recvStack.send(*msg200);
>          }
>       }
>    }
> 
>    UInt64 elapsed = Timer::getTimeMs() - startTime;
>    cout << totalCalls << " calls peformed in " << elapsed << " ms, a
> rate of "
>         << totalCalls / ((float) elapsed / 1000.0) << " calls per
> second.]" << endl;
> 
>    // *** At this point task manager shows 645MB consumed and it does
> not go down even after a few mins
>    cin >> temp;
>    return 0;
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
>