dev@glassfish.java.net

Re: [V3] Web container not destroyed during domain shutdown

From: Byron Nevins <Byron.Nevins_at_Sun.COM>
Date: Tue, 12 Aug 2008 15:16:16 -0700

Kedar Mhaswade wrote:
>
>
> Byron Nevins wrote:
>> It would be interesting to comment out the sledgehammer and then just
>> start and stop GF and see what happens nowadays
>> The sledgehammer hides any new problems that can be added like
>> non-daemon threads left running.
>
> Yes, possibly. But the requirements are conflicting. In non-embedded
> case,
> user does not like a server that refuses to go down ;) and hence
> System.exit
> is probably the last resort that's there in code today.
>
> Can you try doing equivalent of --force false on stop-domain?
> That would ensure no System.exit is called.
I did it, and the server hangs. At the bottom of this email is the huge
thread dump.
>
> BTW, what's the embedded API for stopping the server?
Server.stop()


*************************** THREAD DUMP AFTER STOPPING SERVER
********************************

Full thread dump Java HotSpot(TM) Client VM (1.5.0_13-b05 mixed mode):

"DestroyJavaVM" prio=6 tid=0x0aef7970 nid=0x1590 waiting on condition
[0x00000000..0x0007fae8]
fu
"Keep-Alive-Timer" daemon prio=8 tid=0x0af90b58 nid=0xa88 waiting on
condition [0x0b84f000..0x0b84fc68]
        at java.lang.Thread.sleep(Native Method)
        at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:149)
        at java.lang.Thread.run(Thread.java:595)

"ContainerBackgroundProcessor[StandardEngine[com.sun.appserv]]" daemon
prio=6 tid=0x0af62e00 nid=0x1440 waiting on condition [0x0b80
f000..0x0b80fce8]
        at java.lang.Thread.sleep(Native Method)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1765)
        at java.lang.Thread.run(Thread.java:595)

"SingleSignOnExpiration" daemon prio=6 tid=0x0af643e0 nid=0xdec waiting
on condition [0x0b7cf000..0x0b7cfd68]
        at java.lang.Thread.sleep(Native Method)
        at
com.sun.enterprise.security.web.SingleSignOn.threadSleep(SingleSignOn.java:687)
        at
com.sun.enterprise.security.web.SingleSignOn.run(SingleSignOn.java:745)
        at java.lang.Thread.run(Thread.java:595)

"ContainerBackgroundProcessor[StandardEngine[com.sun.appserv].StandardHost[server].StandardContext[]]"
daemon prio=6 tid=0x0af8c5e0
nid=0x7c8 waiting on condition [0x0b78f000..0x0b78f9e8]
        at java.lang.Thread.sleep(Native Method)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1765)
        at java.lang.Thread.run(Thread.java:595)

"pool-4-thread-1" prio=6 tid=0x0aeb8930 nid=0x36c waiting on condition
[0x0b53f000..0x0b53fa68]
        at sun.misc.Unsafe.park(Native Method)
        at
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:146)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireNanos(AbstractQueuedSynchronizer.java:807)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(AbstractQueuedSynchronizer.java:1122)
        at
java.util.concurrent.SynchronousQueue$Node.waitForPut(SynchronousQueue.java:291)
        at
java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:443)
        at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:475)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"Thread-8" prio=6 tid=0x0ac74778 nid=0x1710 runnable
[0x0b74f000..0x0b74fae8]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        - locked <0x038c3b48> (a java.net.SocksSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:450)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at
com.sun.jmx.remote.socket.SocketConnectionServer.accept(SocketConnectionServer.java:213)
        at
com.sun.jmx.remote.generic.SynchroMessageConnectionServerImpl.accept(SynchroMessageConnectionServerImpl.java:87)
        at
javax.management.remote.generic.GenericConnectorServer$Receiver.run(GenericConnectorServer.java:380)

"Timer-1" daemon prio=6 tid=0x0aefada0 nid=0x264 in Object.wait()
[0x0b5cf000..0x0b5cf9e8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x03208528> (a java.util.TaskQueue)
        at java.lang.Object.wait(Object.java:474)
        at java.util.TimerThread.mainLoop(Timer.java:483)
        - locked <0x03208528> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:462)

"pool-5-thread-1" daemon prio=6 tid=0x0aeb2eb8 nid=0x1220 waiting on
condition [0x0b57f000..0x0b57fa68]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1841)
        at
java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:341)
        at
org.jvnet.hk2.config.Transactions$ListenerInfo$1.run(Transactions.java:112)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
        at java.util.concurrent.FutureTask.run(FutureTask.java:123)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)

"RMI TCP Accept-0" daemon prio=6 tid=0x0aeb9c58 nid=0x1484 runnable
[0x0b4ff000..0x0b4ffbe8]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        - locked <0x03180218> (a java.net.SocksSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:450)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at sun.rmi.transport.tcp.TCPTransport.run(TCPTransport.java:340)
        at java.lang.Thread.run(Thread.java:595)

"RMI TCP Accept-8686" daemon prio=6 tid=0x0aeb8f00 nid=0x12e4 runnable
[0x0b4bf000..0x0b4bfce8]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        - locked <0x03180408> (a java.net.SocksSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:450)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at sun.rmi.transport.tcp.TCPTransport.run(TCPTransport.java:340)
        at java.lang.Thread.run(Thread.java:595)

"Timer-0" daemon prio=6 tid=0x0ae25e50 nid=0xa74 in Object.wait()
[0x0b47f000..0x0b47fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x031805b8> (a java.util.TaskQueue)
        at java.lang.Object.wait(Object.java:474)
        at java.util.TimerThread.mainLoop(Timer.java:483)
        - locked <0x031805b8> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:462)

"pool-3-thread-1" prio=6 tid=0x0afc6678 nid=0x1594 waiting on condition
[0x0b3ff000..0x0b3ffa68]
        at sun.misc.Unsafe.park(Native Method)
        at
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:146)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireNanos(AbstractQueuedSynchronizer.java:807)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireNanos(AbstractQueuedSynchronizer.java:1122)
        at
java.util.concurrent.SynchronousQueue$Node.waitForPut(SynchronousQueue.java:291)
        at
java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:443)
        at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:475)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"GlassFish Kernel Main Thread" prio=6 tid=0x00a68e78 nid=0x110 in
Object.wait() [0x0b3bf000..0x0b3bfae8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x03126858> (a
com.sun.enterprise.v3.server.AppServerStartup$1)
        at java.lang.Object.wait(Object.java:474)
        at
com.sun.enterprise.v3.server.AppServerStartup$1.run(AppServerStartup.java:106)
        - locked <0x03126858> (a
com.sun.enterprise.v3.server.AppServerStartup$1)

"pool-2-thread-1" daemon prio=6 tid=0x0af52e20 nid=0xdb4 waiting on
condition [0x0b37f000..0x0b37fb68]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1841)
        at
java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:341)
        at
org.jvnet.hk2.config.Transactions$ListenerInfo$1.run(Transactions.java:112)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
        at java.util.concurrent.FutureTask.run(FutureTask.java:123)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-1" daemon prio=6 tid=0x0ad0a4f8 nid=0x11ec waiting on
condition [0x0b33f000..0x0b33fbe8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1841)
        at
java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:341)
        at
org.jvnet.hk2.config.Transactions$ListenerInfo$1.run(Transactions.java:112)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
        at java.util.concurrent.FutureTask.run(FutureTask.java:123)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)

"Low Memory Detector" daemon prio=6 tid=0x00a95c90 nid=0x804 runnable
[0x00000000..0x00000000]

"CompilerThread0" daemon prio=10 tid=0x00a949c0 nid=0x814 waiting on
condition [0x00000000..0x0abcfa48]

"Signal Dispatcher" daemon prio=10 tid=0x00a93d40 nid=0x1308 waiting on
condition [0x00000000..0x00000000]

"Finalizer" daemon prio=8 tid=0x00a8ace0 nid=0xd00 in Object.wait()
[0x0ab4f000..0x0ab4fa68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02fc52f8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x02fc52f8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00a898b0 nid=0x12c4 in
Object.wait() [0x0ab0f000..0x0ab0fae8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x02fc5378> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:474)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x02fc5378> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x00a87ef8 nid=0x15c8 runnable

"VM Periodic Task Thread" prio=10 tid=0x00a97020 nid=0x5d0 waiting on
condition