【发布时间】:2013-11-07 00:54:41
【问题描述】:
我们使用 HornetQ 2.2.5,我们的问题是在客户端(向 Q 发送消息),所有生产者线程都卡在 WAITING 状态。
请注意生产者在一台机器上,而 HornetQ 服务器在另一台机器上。
这是客户端的线程转储:
线程:pool-10-thread-9:优先级:5,demon:false,threadId:521,threadState:WAITING, lockName:java.util.concurrent.Semaphore$NonfairSync@60568a13
sun.misc.Unsafe.park(本机方法)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:156) java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811) java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969) java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
java.util.concurrent.Semaphore.acquire(Semaphore.java:441) org.hornetq.core.client.impl.ClientProducerCreditsImpl.acquireCredits(ClientProducerCreditsImpl.java:74) org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:305) org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:142) org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:451) org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:199)
到 Q 的连接和会话在客户端被缓存和重用。
在服务器端有以下日志:
[hornetq-failure-check-thread] 19:25:30,820 警告 [org.hornetq.core.protocol.core.impl.RemotingConnectionImpl]
检测到连接失败:没有从 /10.2.6.11:50697。客户端可能已退出或崩溃 无需关闭其连接,或服务器与服务器之间的网络 客户端失败。您可能还配置了 connection-ttl 和 客户端故障检查周期不正确。请查看用户手册 更多信息。现在将关闭连接。 [代码=3]
所有生产者线程都卡住了有什么原因吗?
【问题讨论】: