1

我们在 IBM AIX 机器上使用 Jboss FuseESB Active MQ。我们每天向消费者发送多达 10000 个请求。每个请求的大小约为 10Kb。我们每 3 天就会进行一次堆转储。这是 IBM 堆分析器的图像。

在生成堆之前,我认为 JMS 消息正在被消费者缓慢处理。有什么策略可以提高 JMS 消费者的处理速度。

编辑:

这是堆分析器的图像:

在此处输入图像描述

编辑:

我们正在使用嵌入式代理。这是我们正在使用的 activemq.xml:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org /schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

<!-- Allows us to use system properties and fabric as variables in this configuration file -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties">
        <bean class="org.fusesource.mq.fabric.ConfigurationProperties"/>
    </property>      
</bean>

<broker xmlns="http://activemq.apache.org/schema/core"
        brokerName="${broker-name}"
        dataDirectory="${data}"
        start="false">

    <destinationPolicy>
        <policyMap>
          <policyEntries>
            <policyEntry topic=">" producerFlowControl="true">
              <pendingMessageLimitStrategy>
                <constantPendingMessageLimitStrategy limit="1000"/>
              </pendingMessageLimitStrategy>
            </policyEntry>
            <policyEntry queue=">" producerFlowControl="true" queuePrefetch="1">
                  <deadLetterStrategy>
                       <individualDeadLetterStrategy queuePrefix="DLQ."/>
                  </deadLetterStrategy>
            </policyEntry>
          </policyEntries>
        </policyMap>
    </destinationPolicy>

    <managementContext>
        <managementContext createConnector="false"/>
    </managementContext>

    <persistenceAdapter>
        <kahaDB directory="${data}/kahadb"/>
    </persistenceAdapter> 


<!--

<plugins>
        <jaasAuthenticationPlugin configuration="karaf" />
    </plugins>
-->
    <systemUsage>
        <systemUsage>
            <memoryUsage>
                <memoryUsage limit="128 mb"/>
            </memoryUsage>
            <storeUsage>
                <storeUsage limit="100 gb"/>
            </storeUsage>
            <tempUsage>
                <tempUsage limit="50 gb"/>
            </tempUsage>
        </systemUsage>
    </systemUsage>


    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:0?maximumConnections=1000"/>
    </transportConnectors>
</broker>
</beans>
4

1 回答 1

0

是否可能有任何未启动的队列和/或持久主题订阅者,并且他们的消息保留在 JMS 代理中?

您应该浏览 JMS 目标,例如使用 JMX,并识别消息及其使用者。如果您检查了每个消费者都已正确配置和运行,请调试消息消耗如此缓慢的原因。

于 2014-03-08T15:32:29.523 回答