【问题标题】:HornetQ producer threads are stuck in WAITING stateHornetQ 生产者线程卡在 WAITING 状态
【发布时间】: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]

所有生产者线程都卡住了有什么原因吗?

【问题讨论】:

    标签: hornetq producer


    【解决方案1】:

    这是 hornetq 用户论坛上的常见问题解答...

    HornetQ 有不同的方法来处理消息溢出,防止内存溢出。

    • 溢出时阻塞
    • 流到磁盘(我们称之为..分页)
    • 丢弃(消息将消失。仅在您可以承受丢失消息的情况下有效)
    • 错误(2.4最近引入,2.2没有这个功能)

    当您将系统设置为阻止时,客户端将等待仅在您消费消息后才会到达的信用。

    所以,要么消费消息,要么将地址设置设置为分页。

    关于设置分页的文档:

    http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/paging.html#paging.main.config

    关于阻塞模式的文档:

    http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/paging.html#d0e5213

    【讨论】:

    • 根据您的回答,消息等待被消费。但我们验证了 Q 是空的(使用 QueueBrowser),如果 Q 配置为 DROP,则另外还有 addfres-full-policy。这是 Q 配置 XML: 52428800010485760 DROP
    • 此外,我们验证了消费者工作 - 我们在消费者工作时浏览了 Q 并且浏览器在 Q 中显示 0 msgs。然后我们禁用消费者并且浏览器显示 Q 包含更多和更多消息。在此过程中,生产者被阻止。
    • 您使用的是旧版本 2.2.5。您可能应该升级,如果您仍然看到问题,我需要一个错误的复制器。
    • 您还应该验证您是否对该地址没有任何其他订阅...(例如主题订阅不消费消息)
    猜你喜欢
    • 2018-08-27
    • 2018-12-21
    • 1970-01-01
    • 2013-02-01
    • 2015-04-07
    • 2018-09-24
    • 2017-02-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多