RMI Hang after long period of no use
843793Nov 12 2004 — edited Jun 28 2006Occaisonally one of our lightly used RMI servers decides to not accept a new connection. This happens after a long period of no use. The last time it happened I captured a thread dump (THREAD DUMP#1) of the RMI server process.
Just for comparison I then started another client and tried to connect again. See THREAD DUMP#2.
Any suggestions where I should start looking in my code? I have checked the Java bugs database without success.
Thanks.
Tom
*** THREAD DUMP #1
*** THREAD DUMP #1
*** THREAD DUMP #1
Full thread dump Java HotSpot(TM) Client VM (1.4.2_05-b04 mixed mode):
"RMI TCP Connection(5)-156.34.214.173" daemon prio=1 tid=0x082e39b0 nid=0x4f03 waiting for monitor entry [4d247000..4d248854]
at sun.rmi.server.LoaderHandler.getDefaultCodebaseURLs(Unknown Source)
- waiting to lock <0x489b0950> (a java.lang.Class)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.transport.DGCImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"RMI TCP Connection(4)-156.34.214.173" daemon prio=1 tid=0x082e13e8 nid=0x4f03 waiting on condition [4d2c8000..4d2c9854]
at sun.net.www.ParseUtil.decode(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getPermission(Unknown Source)
at sun.rmi.server.LoaderHandler.addPermissionsForURLs(Unknown Source)
at sun.rmi.server.LoaderHandler.access$300(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.server.LoaderHandler.lookupLoader(Unknown Source)
- locked <0x489b0950> (a java.lang.Class)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.transport.DGCImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"DestroyJavaVM" prio=1 tid=0x0805b220 nid=0x4f03 waiting on condition [0..bfffc374]
"GC Daemon" daemon prio=1 tid=0x082e74d0 nid=0x4f03 in Object.wait() [4d146000..4d146854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b87598> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(Unknown Source)
- locked <0x44b87598> (a sun.misc.GC$LatencyLock)
"RMI Reaper" prio=1 tid=0x081f5a08 nid=0x4f03 in Object.wait() [4d0c5000..4d0c5854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b86a68> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x44b86a68> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.rmi.transport.ObjectTable$Reaper.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Thread-1" daemon prio=1 tid=0x081f2618 nid=0x4f03 in Object.wait() [4d044000..4d044854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b86d58> (a java.util.TaskQueue)
at java.lang.Object.wait(Unknown Source)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x44b86d58> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
"RMI TCP Accept-10056" daemon prio=1 tid=0x081f6998 nid=0x4f03 runnable [4cfc3000..4cfc3854]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
- locked <0x44b86ab8> (a java.net.PlainSocketImpl)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Signal Dispatcher" daemon prio=1 tid=0x080a5e90 nid=0x4f03 waiting on condition [0..0]
"Finalizer" daemon prio=1 tid=0x08091448 nid=0x4f03 in Object.wait() [41fd8000..41fd8854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b77a08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x44b77a08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
"Reference Handler" daemon prio=1 tid=0x080908a0 nid=0x4f03 in Object.wait() [41f57000..41f57854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b77a70> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Unknown Source)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x44b77a70> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=1 tid=0x0808f660 nid=0x4f03 runnable
"VM Periodic Task Thread" prio=1 tid=0x080a86d0 nid=0x4f03 waiting on condition
"Suspend Checker Thread" prio=1 tid=0x080a5478 nid=0x4f03 runnable
*** THREAD DUMP #2
*** THREAD DUMP #2
*** THREAD DUMP #2
Full thread dump Java HotSpot(TM) Client VM (1.4.2_05-b04 mixed mode):
"RMI TCP Connection(6)-156.34.214.173" daemon prio=1 tid=0x082e2890 nid=0x4f03 waiting on condition [4d1c6000..4d1c7854]
at java.io.ObjectStreamClass.matchFields(Unknown Source)
at java.io.ObjectStreamClass.getReflector(Unknown Source)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"RMI TCP Connection(5)-156.34.214.173" daemon prio=1 tid=0x082e39b0 nid=0x4f03 waiting for monitor entry [4d247000..4d248854]
at sun.rmi.server.LoaderHandler.getDefaultCodebaseURLs(Unknown Source)
- waiting to lock <0x489b0950> (a java.lang.Class)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.transport.DGCImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"RMI TCP Connection(4)-156.34.214.173" daemon prio=1 tid=0x082e13e8 nid=0x4f03 waiting on condition [4d2c8000..4d2c9854]
at sun.net.www.ParseUtil.decode(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getPermission(Unknown Source)
at sun.rmi.server.LoaderHandler.addPermissionsForURLs(Unknown Source)
at sun.rmi.server.LoaderHandler.access$300(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.server.LoaderHandler.lookupLoader(Unknown Source)
- locked <0x489b0950> (a java.lang.Class)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.transport.DGCImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"DestroyJavaVM" prio=1 tid=0x0805b220 nid=0x4f03 waiting on condition [0..bfffc374]
"GC Daemon" daemon prio=1 tid=0x082e74d0 nid=0x4f03 in Object.wait() [4d146000..4d146854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b87598> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(Unknown Source)
- locked <0x44b87598> (a sun.misc.GC$LatencyLock)
"RMI Reaper" prio=1 tid=0x081f5a08 nid=0x4f03 in Object.wait() [4d0c5000..4d0c5854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b86a68> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x44b86a68> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.rmi.transport.ObjectTable$Reaper.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Thread-1" daemon prio=1 tid=0x081f2618 nid=0x4f03 in Object.wait() [4d044000..4d044854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b86d58> (a java.util.TaskQueue)
at java.lang.Object.wait(Unknown Source)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x44b86d58> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
"RMI TCP Accept-10056" daemon prio=1 tid=0x081f6998 nid=0x4f03 runnable [4cfc3000..4cfc3854]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
- locked <0x44b86ab8> (a java.net.PlainSocketImpl)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Signal Dispatcher" daemon prio=1 tid=0x080a5e90 nid=0x4f03 waiting on condition [0..0]
"Finalizer" daemon prio=1 tid=0x08091448 nid=0x4f03 in Object.wait() [41fd8000..41fd8854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b77a08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x44b77a08> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
"Reference Handler" daemon prio=1 tid=0x080908a0 nid=0x4f03 in Object.wait() [41f57000..41f57854]
at java.lang.Object.wait(Native Method)
- waiting on <0x44b77a70> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Unknown Source)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x44b77a70> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=1 tid=0x0808f660 nid=0x4f03 runnable
"VM Periodic Task Thread" prio=1 tid=0x080a86d0 nid=0x4f03 waiting on condition
"Suspend Checker Thread" prio=1 tid=0x080a5478 nid=0x4f03 runnable