1

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

如果我一次增加总请求的数量,那么随着数量的增加,交换队列会卡在任何组件上。在所有请求开始处理之后,大部分交换都卡在了端组件或 dispatcher* 组件上。容器的堆大小达到非常高,一段时间后它会崩溃并自动重新启动。

我也使用过事务管理器。flowname 也被称为 jms。

迫切需要一些解决方案。

4

2 回答 2

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。更多信息生产者流控制消息游标

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

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

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

于 2010-04-19T20:32:45.370 回答
0

您可以尝试使用KahaDB而不是“amqPersistenceAdapter”。仅仅通过切换到这个,我们就看到了巨大的吞吐量增加。

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

    <persistenceAdapter>
        <kahaDB directory="../data/kaha"
            enableJournalDiskSyncs="false"
            indexWriteBatchSize="10000"
            indexCacheSize="1000" />
    </persistenceAdapter>
于 2010-12-28T17:29:37.663 回答