环境:OS X EI Capitan 10.11.4 + ActiveMQ 5.13
1. ActiveMQ JVM 内存设置
修改 bin/activemq 脚本,在开头增加:
# Set jvm memory configuration
if [ -z "$ACTIVEMQ_OPTS_MEMORY" ] ; then
ACTIVEMQ_OPTS_MEMORY="-Xms8G -Xmx8G"
fi
如果 Broker 中有大量线程,可以考虑设置 -Xss: 减少每个线程使用的 stack size。
2. Broker 使用内存设置:memoryUsage
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
说明:
(1)memoryUsage 表示 Broker 可以使用的最大内存,是所有队列可以使用内存的总和。
当超过 memoryUsage 指定的大小时,消息生产者会被阻塞。
(2)storeUsage 表示持久化存储文件的大小。
(3)tempUsage 表示非持久化消息存储的临时内存大小。
3. 设置某个 destination 可以使用的内存
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" memoryLimit="5MB"/>
</policyEntries>
</policyMap>
</destinationPolicy>
4. 消费者的内存
消费端的内存爆掉通常是由于 prefetch size 太大造成的。
(1)修改所有消费者的 prefetch size
tcp://localhost:61616?jms.prefetchPolicy.all=50
(2)修改所有 Queue 的消费者的 prefetch size
tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
(3)修改指定 Queue 的消费者的 prefetch size
queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");
consumer = session.createConsumer(queue);
参考文献:
1. http://activemq.apache.org/javalangoutofmemory.html
2. http://www.huaishao8.com/config/activemq/198.html
3. http://activemq.apache.org/what-is-the-prefetch-limit-for.html
1. ActiveMQ JVM 内存设置
修改 bin/activemq 脚本,在开头增加:
# Set jvm memory configuration
if [ -z "$ACTIVEMQ_OPTS_MEMORY" ] ; then
ACTIVEMQ_OPTS_MEMORY="-Xms8G -Xmx8G"
fi
如果 Broker 中有大量线程,可以考虑设置 -Xss: 减少每个线程使用的 stack size。
2. Broker 使用内存设置:memoryUsage
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
说明:
(1)memoryUsage 表示 Broker 可以使用的最大内存,是所有队列可以使用内存的总和。
当超过 memoryUsage 指定的大小时,消息生产者会被阻塞。
(2)storeUsage 表示持久化存储文件的大小。
(3)tempUsage 表示非持久化消息存储的临时内存大小。
3. 设置某个 destination 可以使用的内存
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" memoryLimit="5MB"/>
</policyEntries>
</policyMap>
</destinationPolicy>
4. 消费者的内存
消费端的内存爆掉通常是由于 prefetch size 太大造成的。
(1)修改所有消费者的 prefetch size
tcp://localhost:61616?jms.prefetchPolicy.all=50
(2)修改所有 Queue 的消费者的 prefetch size
tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
(3)修改指定 Queue 的消费者的 prefetch size
queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");
consumer = session.createConsumer(queue);
参考文献:
1. http://activemq.apache.org/javalangoutofmemory.html
2. http://www.huaishao8.com/config/activemq/198.html
3. http://activemq.apache.org/what-is-the-prefetch-limit-for.html
没有评论:
发表评论