IBM AIX 시스템에서 Jboss FuseESB Active MQ를 사용하고 있습니다. 우리는 하루에 최대 10000 건의 요청을 소비자에게 보내고 있습니다. 각 요청은 약 10KB 크기입니다. 우리는 매 3 일마다 덤프를 받고 있습니다. 다음은 IBM Heap Analyzer의 이미지입니다.힙 덤프를 생성하는 ActiveMQ 생성자
힙이 생성되기 바로 전에 JMS 메시지가 소비자에 의해 느리게 처리되는 것으로 생각됩니다. JMS 소비자의 처리 속도를 높이는 전략은 무엇입니까?
편집 : 여기
는 힙 분석기의 이미지 :
이편집 : 우리는 임베디드 브로커를 사용하는
.
<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>
여기에 약간의 세부 사항이 있습니다. 사실 임베디드 브로커를 사용한다고 가정 할 때 맞습니까? 또한, 지속성 구성은 무엇입니까? 지속성을 비활성화하면 브로커가 모든 전송 메시지를 메모리에 보관해야하므로 OOM 문제를 설명 할 수 있습니다. 그럼에도 불구하고 더 큰 중간 저장 장치를 사용하는 경우에도 사용자가 생산하는 것보다 느리게 소비하는 경우 분명히 문제가 발생할 수 있습니다. 또한 소비자의 속도를 높이거나 더 빠른 시스템을 실행하거나 여러 프로세스를 소비자에게 대기열, 귀하의 아키텍처가 허용하는 경우. – fvu
편집 할 activemq.xml을 추가했습니다. 또한 우리는 지속성을 위해 kahadb에서 사용하고 있습니다. – krishna2642
메모리를 차지하는 객체를 소유하고있는 힙 덤프 이미지가 명확하지 않습니다. 더 많은 분석을하고 질문에 추가 할 수 있습니까? –