We just recently began some soak testing of our JBoss application. In the last two runs of this soak test we have had three separate machines get into a hung state. Each of those machines end up hung in the same method AbstractInstanceCache.tryToPassivate(). The following thread dump shows the call stack of the stuck thread. Looking at the code for BeanLockSupport.sync() it seems as though the only way this thread can get hung here is if another thread already had entered the sync() method previously.
Has any one seen any thing similar to this problem?
This certainly looks like it could be a JBoss bug!
"Thread-46" daemon prio=1 tid=0x6d98f3c8 nid=0x1598 in Object.wait() [b5dff000..b5dff908]
at java.lang.Object.wait(Native Method)
- waiting on <0x4a8a9ae0> (a org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock)
at java.lang.Object.wait(Object.java:429)
at org.jboss.ejb.plugins.lock.BeanLockSupport.sync(BeanLockSupport.java:70)
- locked <0x4a8a9ae0> (a org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock)
at org.jboss.ejb.plugins.AbstractInstanceCache.tryToPassivate(AbstractInstanceCache.java:151)
at org.jboss.ejb.plugins.AbstractInstanceCache.release(AbstractInstanceCache.java:192)
at org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy.ageOut(LRUEnterpriseContextCachePolicy.java:274)
at org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy$OveragerTask.kickOut(LRUEnterpriseContextCachePolicy.java:446)
at org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy$OveragerTask.run(LRUEnterpriseContextCachePolicy.java:405)
- locked <0x45910820> (a java.lang.Object)
at java.util.TimerThread.mainLoop(Timer.java:432)
at java.util.TimerThread.run(Timer.java:382)