Servicemix ActiveMQ性能问题

时间:2010-04-06 18:53:10

标签: activemq soa apache-servicemix

我在我的产品中使用apache servicemix和apache activeMQ。在HttpConnector的情况下,我发现了一个性能问题。

如果我一次增加总请求数,那么随着数量增加,交换队列会卡在任何组件上。在所有请求开始处理之后,大多数交换都停留在最终组件或调度程序*组件上。容器的堆大小达到很高,一段时间后它会自动崩溃并重新启动。

我也使用了transactionmanager。 flowname也被称为jms。

迫切需要一些解决方案。

2 个答案:

答案 0 :(得分:0)

  

如果我一次增加总请求数,那么随着数量增加,交换队列会卡在任何组件上。

ActiveMQ有一种机制来阻止生产者写入消息,它被称为“流控制”,似乎你的生产者比消费者更快(或消费者的速度不稳定),所以首先检查你的AMQ的memoryLimit配置(也可以定义它或特殊队列)。尽量增加它。

<destinationPolicy>
  <policyMap>
    <policyEntries>

      <policyEntry topic="FOO.>" producerFlowControl="false" memoryLimit="1mb">
        <dispatchPolicy>
          <strictOrderDispatchPolicy/>
        </dispatchPolicy>
        <subscriptionRecoveryPolicy>
          <lastImageSubscriptionRecoveryPolicy/>
        </subscriptionRecoveryPolicy>
      </policyEntry>

    </policyEntries>
  </policyMap>

此外,您可以使用producerFlowControl="false"选项禁用停止处理传入消息。因此,如果将使用所有缓冲区,AMQ将减速并且所有消息将存储到HD。更多信息Producer Flow ControlMessage Cursors

  

Container的堆大小达到很高,一段时间后它会自动崩溃并重新启动。

但无论如何,它只是调整你的应用程序的方式,它不是解决方案,因为总是你会遇到一些资源耗尽的情况:)

您应该限制传入的请求或平衡它们f.e.使用Pound

答案 1 :(得分:0)

您可以尝试使用KahaDB代替“amqPersistenceAdapter”。通过切换到这一点,我们看到了巨大的吞吐量增长。

这是我们使用的配置(高度依赖于您的应用程序,但请确保“enableJournalDiskSyncs”设置为false)

    <persistenceAdapter>
        <kahaDB directory="../data/kaha"
            enableJournalDiskSyncs="false"
            indexWriteBatchSize="10000"
            indexCacheSize="1000" />
    </persistenceAdapter>