[jboss-user] [JBoss Messaging] - Re: Resource GC problem
Kevin.Conner@jboss.com
do-not-reply at jboss.com
Fri Mar 9 11:33:14 EST 2007
The following is a copy of the email I sent to our group earlier today.
Kev
-----------------------------------------------------------------------------
>From what I can see the issue appears to be related to two things
- The way the current codebase repeatedly creates connections
- The way JBoss Remoting works
One cause appears to be the timers used by remoting. From what I can
see there are three in play
- ConnectionValidator
- BisocketServerInvoker$ControlMonitorTimerTask
- LeasePinger$LeaseTimerTask
Each one of these timers has indirect access to the majority of the heap.
The big culprit in the timers appears to be LeasePinger$LeaseTimerTask.
When connections are closed this task is cancelled but unfortunately
cancelling j.u.TimerTask does *not* remove the task from the queue, all
it does is mark it as cancelled. The consequence of this is that every
instance referenced by the task *cannot* be garbage collected until the
timer would normally fire (and the task is then removed from the queue).
Referenced from each LeasePinger instance is a BisocketClientInvoker
which contains a ClientSocketWrapper. Each ClientSocketWrapper
references a Socket, a DataInputStream (containing BufferedInputStream)
and a DataOutputStream (containing BufferedOutputStream). Each BIS/BOS
contains a 64k array! In my tests these instances amount to a
cumulative size of about 1/3 of the heap.
Another cause appears to be the use of hash maps. There are numerous
hashmaps referenced from BisocketServerInvoker and BisocketClientInvoker
which do not appear to be garbage collected. One reason is the above
timers but a second is that BisocketServerInvoker holds on to
BisocketServerInvoker references in a static map called
listenerIdToServerInvokerMap. This map currently contains an instance
of BisocketServerInvoker for every iteration of the loop.
This has all been discovered from examining profile information, not
source code. It may be that this analysis is completely wrong and that
examination of the source code will highlight other issues.
Kev
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4026657#4026657
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4026657
More information about the jboss-user
mailing list