2014-03-04 5 views
0

IBM AIX 시스템에서 Jboss FuseESB Active MQ를 사용하고 있습니다. 우리는 하루에 최대 10000 건의 요청을 소비자에게 보내고 있습니다. 각 요청은 약 10KB 크기입니다. 우리는 매 3 일마다 덤프를 받고 있습니다. 다음은 IBM Heap Analyzer의 이미지입니다.힙 덤프를 생성하는 ActiveMQ 생성자

힙이 생성되기 바로 전에 JMS 메시지가 소비자에 의해 느리게 처리되는 것으로 생각됩니다. JMS 소비자의 처리 속도를 높이는 전략은 무엇입니까?

편집 : 여기

는 힙 분석기의 이미지 :

enter image description here

편집 : 우리는 임베디드 브로커를 사용하는

.

<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> 
+1

여기에 약간의 세부 사항이 있습니다. 사실 임베디드 브로커를 사용한다고 가정 할 때 맞습니까? 또한, 지속성 구성은 무엇입니까? 지속성을 비활성화하면 브로커가 모든 전송 메시지를 메모리에 보관해야하므로 OOM 문제를 설명 할 수 있습니다. 그럼에도 불구하고 더 큰 중간 저장 장치를 사용하는 경우에도 사용자가 생산하는 것보다 느리게 소비하는 경우 분명히 문제가 발생할 수 있습니다. 또한 소비자의 속도를 높이거나 더 빠른 시스템을 실행하거나 여러 프로세스를 소비자에게 대기열, 귀하의 아키텍처가 허용하는 경우. – fvu

+0

편집 할 activemq.xml을 추가했습니다. 또한 우리는 지속성을 위해 kahadb에서 사용하고 있습니다. – krishna2642

+0

메모리를 차지하는 객체를 소유하고있는 힙 덤프 이미지가 명확하지 않습니다. 더 많은 분석을하고 질문에 추가 할 수 있습니까? –

답변

0

이 가능 어떤 대기열 및/또는 시작되지 않고 자신의 메시지가 JMS 브로커에 지속되는 내구성이 주제 가입자가 있음 : 여기에 우리가 사용하는 activemq.xml은?

예를 들어 JMX를 사용하여 JMS 대상을 찾아보고 메시지와 해당 사용자를 식별해야합니다. 모든 소비자가 올바르게 구성되어 실행 중인지 확인한 경우 메시지가 느리게 소비되는 이유를 디버깅하십시오.