ActiveMQ内存设置和流控

转载 2015年07月07日 09:54:55

启动脚本设置jvm的内存

if "%ACTIVEMQ_OPTS%" == "" set ACTIVEMQ_OPTS=-Xms1G-Xmx1G -Djava.util.logging.config.file=logging.properties

 

broker配置中的系统内存和磁盘空间使用量

         <systemUsage>

            <systemUsage>

                <memoryUsage>

                    <memoryUsagelimit="64 mb"/>

                </memoryUsage>

                <storeUsage>

                    <storeUsagelimit="100 gb"/>

                </storeUsage>

                <tempUsage>

                    <tempUsagelimit="50 gb"/>

                </tempUsage>

            </systemUsage>

        </systemUsage>

如果是嵌入式(embedded)方式使用的话,可以new一个SystemUsage来添加到BrokerService中去。这里配置的memoryUsage一定要小于jvm中设置的数量。

5.9.0版本,如果设置的 memoryUsagelimit大于实际可用java heap size值,比如默认启动 xmx=1G,那么实际的java heap size大概是910M,

则broker启动时会log.error提示设置内存出错,然后强制使用实际java heap size* 70% = 637M作为memoryUsagelimit。


splitSystemUsageForProducersConsumers导致消费缓慢甚至无法消费的问题

其实broker中还可以单独配置生产者使用的producerSystemUsage 和消费者使用的consumerSystemUsage,格式跟systeUsage一样。

默认情况下,没有配置producerSystemUsage 和 consumerSystemUsage,则生产者和消费者都使用systemUsage。

这时可能会因为生产者线程把内存用完,导致消费者线程处理缓慢甚至无法消费的问题。这种情况下,添加消费端的机器和消费者数量可能都无法增加消费的速度。

解决办法就是:

在broker上设置splitSystemUsageForProducersConsumers=”true”,使得生产者线程和消费者线程各使用各的内存。

默认是 生产者线程内存:消费者线程内存 = 6:4。

也可以通过如下两个参数设置生产者线程内存和消费者线程内存各一半:

producerSystemUsagePortion = 50

consumerSystemUsagePortion = 50

 

生产者流控

从5.x版本起,可以给每个producer单独设置流控。流控简单的说就是控制生产者的在内存使用限制下的行为。当然,流控的目的在于防止在将ActiveMQ作为内存MQ使用时,生产速度大于消费速度时将MQ撑爆的问题。

分两个情况:

1、 同步发送消息(useAsynSend为false):此时将在SystemUsage的限制下,使用destinationPolicy中的policyEntry中的限制,例如:

<destinationPolicy>

  <policyMap>

    <policyEntries>

      <policyEntry queue="queueA"producerFlowControl="true"memoryLimit="1mb">   

  <pendingQueuePolicy>

    <vmQueueCursor/>

  </pendingQueuePolicy>

</policyEntry>

    </policyEntries>

  </policyMap>

</destinationPolicy>

限制非持久化时queueA 的内存使用量为1mb,达到这个内存使用量时直接阻塞掉producer,直到有空余的内存时,才允许producer发送消息。

也可通过在systemUsage配置上设置sendFailIfNoSpace="true"或 sendFailIfNoSpaceAfterTimeout="3000"来控制客户端异常和等待时间。

 

异步发送时,由于不阻塞生产者,

可以通过connctionFactory.setProducerWindowSize(1024000);

来控制broker确认收到消息前生产者能发送的最大数据量(字节)。

 

 

消费者流控

消费者端,一般来说消费的越快越好,broker的积压越小越好。

但是考虑到事务性和客户端确认的情况,如果一个消费者一次获取到了很多消息却都不确认,这会造成事务上下文变大,broker端这种“半消费状态”的数据变多,所以ActiveMQ有一个prefetchSize参数来控制未确认情况下,最多可以预获取多少条记录。

默认情况如下:

持久化queue:1000条

非持久化queue: 1000条

持久化topic:100条

非持久化topic: 无限制

可以通过3中方式设置prefetchSize

1、  tcp://localhost:61616?jms.prefetchPolicy.all=50

2、  tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1

3、  queue = new ActiveMQQueue("TEST.QUEUE?consumer.prefetchSize=10");

来自: http://blog.csdn.net/kimmking/article/details/9670653

相关文章推荐

ActiveMQ内存设置和流控

从jvm内存、broker内存、生产者和消费者内存配置和流控方面介绍ActiveMQ的内存配置、流控与使用。...
  • KimmKing
  • KimmKing
  • 2013年07月31日 17:25
  • 27020

activemq-中控台工程

  • 2017年11月15日 15:36
  • 5.31MB
  • 下载

ActiveMQ的基本概念与设置

ActiveMQ 是Apache出品,目前最流行的的开源的消息中间件,它完全支持JMS规范,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着重要的地位。本文对Acti...
  • zsh2050
  • zsh2050
  • 2017年01月04日 23:51
  • 395

activemq 安装基本命令及持久化设置

1.安装: 下载地址http://activemq.apache.org/download.html 1.cd /usr/local/ 2.下载 apache-activemq-5.13.3-b...

activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)

配置文件如下     Licensed to the Apache Software Foundation (ASF) under one or more     contributor li...

activemq之主题、队列设置密码

除了监视台可以设置用户名和密码外(在conf/jetty.xml中设置),ActiveMQ也可以对各个主题和队列设置用户名和密码,找到conf/activemq.xml文件,配置如下:...

ActiveMQ管理后台以及消费者密码设置

1.管理后台密码 (1)ActiveMQ使用的是jetty服务器打开apache-activemq-5.8.0\conf\jetty.xml 找到 ...
  • lwphk
  • lwphk
  • 2016年05月10日 15:51
  • 5977

apache-activemq-5.14.0设置自启动和加入服务管理

场景:有的时候服务器不可避免需要重新启动, activemq 不可避免需要跟着重新手工去启动;通过设置 自启动管理来减少手工操作压力处理方案: 1、安装并保证 apache-activemq-5.14...

ActiveMQ的设置消息时长,事务,确认机制 ,持久化(五)

1.消息时长,确认机制  直接上代码 发布主题    public class TopicPub {        public static void main(String[...

eclipse paho包对于ActiveMQ持久化订阅者的设置

在实现基于ActiveMQ的电影推送系统的过程中,因为是Android端的应用程序,而在查阅网上的各种资料发现,Android端直接用原生的MQTT来做推送的比较少,而eclipse paho这个封装...
  • wtrnash
  • wtrnash
  • 2017年05月20日 22:58
  • 437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ActiveMQ内存设置和流控
举报原因:
原因补充:

(最多只允许输入30个字)