ActiveMQ消费者消失

时间:2015-10-08 17:54:53

标签: java jms apache-camel activemq spring-jms

我们正在使用具有以下配置的ActiveMQ 5.10代理

  • JVM堆48G,其中70%分配给memoryUsage
  • 70G存储空间和1G温度

我们使用Apache camel 2.10.2路由来消耗队列中的消息。 收到消息后,我们使用spring的jmstemplate创建了大约4万条较小的消息/已接收消息并使用asyncSend将它们发布到另一个队列。

我们为使用pooledconnection的消费者和生产者配置了不同的connectionFactory

当我们在队列中生成数百万条消息时,我们在producerConnectionFactory上配置了producerWindowSize

问题: 运行几个小时后,我们会在代理上生成大约1000万条消息,队列中的消费者开始消失。最终没有消费者,我们的系统就停止了。 我们目前唯一的工作就是重新启动应用程序

问题: 如果代理重新启动,asyncSend生成器与producerWindoeSize的行为是什么?

更新 当camel消费者在队列中发送数百万条消息时,我可以通过重新启动代理来重现此问题。

我打算在骆驼recoveryInterval上设置JmsConfiguration,请发表您对此的看法。

更新

我能够在消费者消失的jvm上捕获一个线程转储。 线程在生产者窗口上被阻塞,waitForSpace()。

Camel (CamelContext) thread #573 - JmsConsumer[RequestQueue]" daemon prio=6 tid=0x0000000011ded000 nid=0x156c in Object.wait() [0x000000005b69d000]
   java.lang.Thread.State: WAITING (on object monitor) 
        at java.lang.Object.wait(Native Method) 
        at java.lang.Object.wait(Object.java:485) 
        at org.apache.activemq.usage.MemoryUsage.waitForSpace(MemoryUsage.java:67) 
        - locked <0x00000006a0bfc058> (a java.lang.Object) 
        at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:271) 
        at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:212) 
        at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:79) 
        - locked <0x00000006a0bfbec8> (a org.apache.activemq.ActiveMQMessageProducer) 
        at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:67) 
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:589) 
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:569) 
        at org.springframework.jms.core.JmsTemplate$4.doInJms(JmsTemplate.java:546) 
        at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466) 
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:543) 
        at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:620) 

即使内存使用率恢复正常,此等待也永远不会完成。 我正在使用activeMQ 5.7客户端库

https://issues.apache.org/jira/browse/AMQ-4512

但是想知道,有没有有效的工作?即使我将消费者减少到1,我也会发现这个问题。

0 个答案:

没有答案