Customer reports a memory leak with a WebLogic app with 1.5.0_16. Histograms shows several classes continuously growing over time. These classes include weblogic.corba.client.utils.EndPointInfo and several com.sun.cobra.se.impl.* classes. The heap dump shows EndPointInfo is held by reference by com.sun.corba.se.impl.legacy.connection.SocketFactoryContactInfoImpl
References to SocketFactoryContactInfoImpl were more com.sun.cobra.se.impl.* classes. Going further up the stack, I found these com.sun classes were referencing each other in a circular fashion.
I looked at one particular instance of com.sun.corba.se.impl.legacy.connection.SocketFactoryConnectionImpl. There are over 8800 references to this instance. Here are some of the references.
com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl@0x1d1b75d8 (85 bytes) : field connection
com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl@0x1da72108 (85 bytes) : field connection
com.sun.corba.se.impl.encoding.CDRInputObject@0x22062df8 (37 bytes) : field corbaConnection
com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl@0x1aba53a0 (85 bytes) : field connection
Here a two relevant bugs, 6725987 and 6553303. Could they be the source of this problem?
CR 6725987 says ORB.destroy() does not cleanup correctly and ORB object instances are not garbage collected.
The evaluation for CR 6553303 says one part of this problem is clear: if the ORB successfully opens a connection, but sometime later the connection is no longer usable, it gets stuck in the cache.
The customer reported that this issue only happens with JDK 1.5. There is no problem on JDK 1.4.2. They also report the issue happens with JDK 1.5 only when IOP is used. The webapp runs fine on JDK 1.5 with TCP.