mina-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Lecharny <elecha...@apache.org>
Subject Re: memory leak? -- help needed
Date Fri, 15 May 2009 08:16:59 GMT
Hi,

this is very strange... If the client close the connection before the 
message is sent to him, then the session should be discarded.

Could you provide the code which initialize the chain you are using ?

Also could you run your test with the latest version (ie, the trunk)? We 
have fixed some bad issues lately about the way messages are handled.

Thanks !


Yongxing Wang wrote:

> In sessionClosed() method in DefaultIoFilterChain, it will do:
>
> s.getWriteRequestQueue().dispose(session);
>
>
> There are only two classes that implements WriteRequestQueue, one is CloseAwareWriteQueue
and another is DefaultWriteRequestQueue. CloseAwareWriteQueue is just a wrapper on top of
DefaultWriteRequestQueue where the dispose() method does nothing.
>  
>   public void dispose(IoSession session) {
>   }
>
>
> So I have a theory for the mem leak:
>
> 1: Client request something,
> 2: Server fetch the data and call session.write(), the data got queued in the wirteRequestQueue.
> 3: Before the data got actually flushed, the client drops the connection
> 4: MINA fires sessionClosed() as expect, but the dispose method didn't actually clear
the queue.
> 5: Because of the session still got referenced by the Finalizer, the huge amount of data
just hang around.
>
>
> Am I right that the dispose() method should clear the queue?
>
> Thanks,
> Yong
>
>
>
>
> -----Original Message-----
> From: Yongxing Wang 
> Sent: Thursday, May 14, 2009 9:31 AM
> To: 'users@mina.apache.org'
> Subject: RE: memory leak? -- help needed
>
> Yes, I will definitely run it against one of those tools (my Jprofile evaluation expired,
need to work it out). 
>
> I guess last night my brain was fried and I didn't provide enough information. The dump
analysis told me that there are still more than 7K NioSocketSession (referenced by java.lang.Finalizer)
hanging around three hours after I the process out of LB. This probably related to one of
my earlier post:
>
> "Looking at the source code, it is caused by DefaultIoFilterChain (because it has a finalize
method)." -- the chain holds a reference to the session.
>
> I tried to trace the "DefaultWriteFuture" to the GC root. With 10G of dump data, the
query never returns.
>
> I will continue to do more analysis. At the mean time, is there a reason that you have
to use "finalize" method in the DefaultIoFilterChain? 
>
> Yong
>
>
> -----Original Message-----
> From: Emmanuel Lecharny [mailto:elecharny@gmail.com] On Behalf Of Emmanuel Lecharny
> Sent: Wednesday, May 13, 2009 11:47 PM
> To: users@mina.apache.org
> Subject: Re: memory leak? -- help needed
>
> Yongxing Wang wrote:
>   
>> Gurus,
>>   
>>     
> hi,
>
> you should use a tool to determine if the memory leak you are 
> experiencing is part of your own code. You have plenty of them out there 
> : JProfiler, OptimizeIt, YourKit, ...
>
> This will give you some insight about the part of the code where this 
> memory leak is likely to be created.
>
> There is not much we can do with the provided information atm...
>
>   


-- 
--
cordialement, regards,
Emmanuel L├ęcharny
www.iktek.com
directory.apache.org



Mime
View raw message