play2war / play2-war-plugin

WAR Plugin for Play framework 2.x
Apache License 2.0
443 stars 71 forks source link

tomcat 6: hangs on shutdown #161

Closed jn73 closed 11 years ago

jn73 commented 11 years ago

After deploying my play2-war bundled application i'm no longer able to successfully shutdown my tomcat 6 (6.0.29). shutdown.sh executes as usual but the tomcat process never dies.

Actually, i'm able to shut it down as long as i haven't hit the play2war servlet with any requests. But after i accessed my app shutdowns will hang.

I've googled it and my guess would be that play2war/play/akka (don't know which) creates some non-daemon thread(s). In that case tomcat (the JVM?) will wait for the threads to die before shutting down.

This can be tested by:

  1. deploying a startup/scaffold play 2 application with only the play2war config added (2.5 servlet).
  2. Deploy it in tc6 and browse to the app.
  3. shutdown.sh
  4. ps -ef | grep tomcat => process lives on
dlecan commented 11 years ago

Sounds like #108.

Can you post a full thread dump with it hangs ?

jn73 commented 11 years ago

Here's the thread dump:

2013-05-22 23:25:55
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.45-b01-451 mixed mode):

"DestroyJavaVM" prio=5 tid=7fbfdf39b800 nid=0x10707a000 waiting on condition [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-8" prio=5 tid=7fbfdf0de800 nid=0x11316d000 waiting on condition [11316c000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-7" prio=5 tid=7fbfe5828800 nid=0x11306a000 waiting on condition [113069000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-6" prio=5 tid=7fbfddb4d000 nid=0x112f67000 waiting on condition [112f66000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-5" prio=5 tid=7fbfe5b02000 nid=0x112e64000 waiting on condition [112e63000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-4" prio=5 tid=7fbfdf0dd800 nid=0x112d61000 waiting on condition [112d60000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-8" prio=5 tid=7fbfdf0dd000 nid=0x112c5e000 waiting on condition [112c5d000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-7" prio=5 tid=7fbfdf121800 nid=0x112b5b000 waiting on condition [112b5a000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-3" prio=5 tid=7fbfdf121000 nid=0x112a58000 waiting on condition [112a57000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-2" prio=5 tid=7fbfe5b01800 nid=0x112955000 waiting on condition [112954000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-6" prio=5 tid=7fbfdf120000 nid=0x112852000 waiting on condition [112851000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-5" prio=5 tid=7fbfddb4c800 nid=0x11274f000 waiting on condition [11274e000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-4" prio=5 tid=7fbfdf063000 nid=0x11264c000 waiting on condition [11264b000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-3" prio=5 tid=7fbfddbee800 nid=0x112549000 waiting on condition [112548000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-2" prio=5 tid=7fbfe5b15800 nid=0x112446000 waiting on condition [112445000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-internal-execution-context-1" prio=5 tid=7fbfe6837000 nid=0x112343000 waiting on condition [112342000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4cfe208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"iteratee-execution-context-1" prio=5 tid=7fbfdf062000 nid=0x112240000 waiting on condition [11223f000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42b0350> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"Timer-0" daemon prio=5 tid=7fbfe5b75000 nid=0x11213d000 in Object.wait() [11213c000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f42cade8> (a java.util.TaskQueue)
    at java.lang.Object.wait(Object.java:485)
    at java.util.TimerThread.mainLoop(Timer.java:483)
    - locked <7f42cade8> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:462)

   Locked ownable synchronizers:
    - None

"play-scheduler-1" prio=5 tid=7fbfdf05f800 nid=0x11203a000 waiting on condition [112039000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at akka.util.internal.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:404)
    at akka.util.internal.HashedWheelTimer$Worker.run(HashedWheelTimer.java:309)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"play-akka.actor.default-dispatcher-5" prio=5 tid=7fbfdf05e800 nid=0x111f37000 waiting on condition [111f36000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f42cae78> (a akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinPool)
    at scala.concurrent.forkjoin.ForkJoinPool.scan(ForkJoinPool.java:1594)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

   Locked ownable synchronizers:
    - None

"http-8080-5" daemon prio=5 tid=7fbfe5b13800 nid=0x11170c000 in Object.wait() [11170b000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4bff518> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked <7f4bff518> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-8080-4" daemon prio=5 tid=7fbfe5b12800 nid=0x1114c0000 in Object.wait() [1114bf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4c01bd8> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked <7f4c01bd8> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-8080-3" daemon prio=5 tid=7fbfe5b12000 nid=0x111322000 in Object.wait() [111321000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4bfe2f8> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked <7f4bfe2f8> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-8080-2" daemon prio=5 tid=7fbfe582e000 nid=0x11121f000 in Object.wait() [11121e000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4bff538> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked <7f4bff538> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-8080-1" daemon prio=5 tid=7fbfe1934000 nid=0x10f0ec000 in Object.wait() [10f0eb000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4bfe318> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked <7f4bfe318> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"RMI TCP Connection(2)-192.168.0.118" daemon prio=9 tid=7fbfdf046000 nid=0x11111c000 runnable [11111b000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    - locked <7f4ae11a8> (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(FilterInputStream.java:66)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - <7f4a15f90> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"JMX server connection timeout 36" daemon prio=9 tid=7fbfe680f800 nid=0x110f9d000 in Object.wait() [110f9c000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4c006b0> (a [I)
    at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
    - locked <7f4c006b0> (a [I)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"RMI Scheduler(0)" daemon prio=9 tid=7fbfe6800000 nid=0x110e9a000 waiting on condition [110e99000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <7f4be0368> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:196)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"RMI TCP Connection(1)-192.168.0.118" daemon prio=9 tid=7fbfe680c000 nid=0x110d97000 runnable [110d96000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    - locked <7f4bf4bb0> (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(FilterInputStream.java:66)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - <7f4c99b38> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"RMI TCP Accept-0" daemon prio=9 tid=7fbfe680b800 nid=0x110bf8000 runnable [110bf7000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    - locked <7f4a3f390> (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"Attach Listener" daemon prio=9 tid=7fbfe5b17800 nid=0x1102eb000 waiting on condition [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"TP-Processor4" daemon prio=5 tid=7fbfddcb6000 nid=0x110960000 in Object.wait() [11095f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f4ab6f90> (a org.apache.jk.common.ChannelSocket)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:305)
    - locked <7f4ab6f90> (a org.apache.jk.common.ChannelSocket)
    at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:668)
    at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:879)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"http-8080-Acceptor-0" daemon prio=5 tid=7fbfdf205800 nid=0x1101e8000 waiting on condition [1101e7000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:344)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"com.google.common.base.internal.Finalizer" daemon prio=5 tid=7fbfe0f1d800 nid=0x1115c8000 in Object.wait() [1115c7000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f494c838> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked <7f494c838> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at com.google.common.base.internal.Finalizer.run(Finalizer.java:125)
    at java.lang.Thread.run(Thread.java:680)

   Locked ownable synchronizers:
    - None

"GC Daemon" daemon prio=2 tid=7fbfdd0bc000 nid=0x10ffe2000 in Object.wait() [10ffe1000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44e5690> (a sun.misc.GC$LatencyLock)
    at sun.misc.GC$Daemon.run(GC.java:100)
    - locked <7f44e5690> (a sun.misc.GC$LatencyLock)

   Locked ownable synchronizers:
    - None

"Low Memory Detector" daemon prio=5 tid=7fbfe081a800 nid=0x10f600000 runnable [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"C2 CompilerThread1" daemon prio=9 tid=7fbfe0819800 nid=0x10f4fd000 waiting on condition [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"C2 CompilerThread0" daemon prio=9 tid=7fbfe0819000 nid=0x10f3fa000 waiting on condition [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Signal Dispatcher" daemon prio=9 tid=7fbfe0818000 nid=0x10f2f7000 runnable [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=7fbfe0817000 nid=0x10f1f4000 waiting on condition [00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Finalizer" daemon prio=8 tid=7fbfdf05b000 nid=0x10efe9000 in Object.wait() [10efe8000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44fc790> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked <7f44fc790> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)

   Locked ownable synchronizers:
    - None

"Reference Handler" daemon prio=10 tid=7fbfdf05a800 nid=0x10eee6000 in Object.wait() [10eee5000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <7f44f16e0> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
    - locked <7f44f16e0> (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
    - None

"VM Thread" prio=9 tid=7fbfdf055800 nid=0x10ede3000 runnable 

"Gang worker#0 (Parallel GC Threads)" prio=9 tid=7fbfdd802800 nid=0x10a47c000 runnable 

"Gang worker#1 (Parallel GC Threads)" prio=9 tid=7fbfdd803000 nid=0x10a57f000 runnable 

"Gang worker#2 (Parallel GC Threads)" prio=9 tid=7fbfdd803800 nid=0x10a682000 runnable 

"Gang worker#3 (Parallel GC Threads)" prio=9 tid=7fbfdd804000 nid=0x10a785000 runnable 

"Gang worker#4 (Parallel GC Threads)" prio=9 tid=7fbfdd805000 nid=0x10a888000 runnable 

"Gang worker#5 (Parallel GC Threads)" prio=9 tid=7fbfdd805800 nid=0x10a98b000 runnable 

"Gang worker#6 (Parallel GC Threads)" prio=9 tid=7fbfdd806000 nid=0x10aa8e000 runnable 

"Gang worker#7 (Parallel GC Threads)" prio=9 tid=7fbfdd806800 nid=0x10ab91000 runnable 

"Concurrent Mark-Sweep GC Thread" prio=9 tid=7fbfdd8e4000 nid=0x10ea5c000 runnable 
"Gang worker#0 (Parallel CMS Threads)" prio=9 tid=7fbfdd8e3000 nid=0x10e056000 runnable 

"Gang worker#1 (Parallel CMS Threads)" prio=9 tid=7fbfdd8e3800 nid=0x10e159000 runnable 

"VM Periodic Task Thread" prio=10 tid=7fbfe082c000 nid=0x10f703000 waiting on condition 

"Exception Catcher Thread" prio=10 tid=7fbfdd801800 nid=0x1072a5000 runnable 
JNI global references: 1544
dlecan commented 11 years ago

Hum, I can't find anything helpfull to understand this issue in this thread dump.

Can you provide a simple test case ?

jn73 commented 11 years ago

Sorry for the delay - just came back from a vacation.

Anyway, steps 1-4 in the description should be enough to test. Just make a "play new ..." project, add play2war and package the project. Deploy it in tc6 and try shutting it down.

I do believe the problem is related to akka however. I tried doing something similar using spray.io (also akka-based) and building a servlet/war application. It also blocked the tomcat shutdown..

dlecan commented 11 years ago

That's an Akka issue: https://groups.google.com/forum/#!topic/akka-user/a8GcX2qEm6g https://www.assembla.com/spaces/akka/tickets/1604-future-threadlocal-leftover#/activity/ticket:

dlecan commented 11 years ago

See also: https://www.assembla.com/spaces/akka/tickets/2672#/activity/ticket: https://www.assembla.com/spaces/akka/tickets/2479#/activity/ticket: