启动脚本设置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
http://www.cnblogs.com/CopyPaster/archive/2012/04/27/2473179.html
http://www.cnblogs.com/hoojo/p/active_mq_jms_apache_activeMQ.html
相关推荐
ActiveMQ 队列消息过期时间设置和自动清除解决方案 ActiveMQ 是一个开源的消息队列系统,用于实现分布式系统之间的异步通信。在使用 ActiveMQ 时,消息过期时间设置和自动清除是一个非常重要的问题。本文将介绍 ...
进入`/usr/local/apache-activemq/bin/`目录,尝试启动和停止ActiveMQ: ```bash ./activemq start ./activemq stop ``` - **创建系统服务**: 创建一个指向ActiveMQ启动脚本的软链接,并将其放置在`/etc/...
### ActiveMQ 消息过期时间设置与自动清除解决方案 #### 概述 在消息队列的场景下,为了防止消息长时间滞留在队列中占用资源或者为了满足业务上对消息时效性的需求,通常需要对消息设定过期时间。本文档详细介绍了...
在Linux环境下,Apache ActiveMQ是一个广泛使用的开源消息代理和队列服务器,它是Java Message Service (JMS) 的实现,能够处理大量的并发消息传递。ActiveMQ提供了高可用性、可扩展性和稳定性,使得它成为分布式...
配置Tomcat主要涉及设置端口、线程池、上下文路径、JVM内存参数等。在`conf/server.xml`中,你可以调整`Connector`元素的属性来优化性能。例如,设置`maxThreads`控制最大并发连接数,`acceptCount`定义等待连接的...
2. 配置管理:通过Web控制台(默认地址:http://localhost:8161/admin/)进行配置和监控,或者修改`conf/activemq.xml`进行高级设置。 3. 创建和管理资源:在Web控制台或通过API创建消息队列、主题等,并管理消费者...
了解这些基础知识后,开发者可以进一步学习如何创建和管理队列、主题,设置消费者和生产者,以及利用ActiveMQ提供的高级特性如虚拟主题、网络连接和代理集群等。同时,掌握JDK 1.8的新特性和最佳实践,能帮助编写更...
在分布式消息传递系统中,Apache ActiveMQ 是一个广泛使用的开源消息代理,它支持多种协议,并提供了高可用性和可扩展性。在生产环境中,为了保证消息的可靠性,通常会使用持久化存储来保存消息,即使在服务重启后也...
ActiveMQ是Apache软件基金会的一个开源项目,提供了一个强大的、高性能的消息中间件,支持多种协议,如AMQP、STOMP、OpenWire等,并且具有高可用性和高可靠性。 本资源提供的内容是关于ActiveMQ的连接池实现,分为...
除了上述配置,`activemq.xml`还可以包含自定义的bean和类加载设置,以满足特定需求。对于初学者,理解这些基本元素是掌握ActiveMQ配置的关键。配合提供的文档,如《activeMQ in Action.doc》和《ActiveMQ测试报告....
这个"ActiveMQ接受和发送工具.rar"压缩包包含了用于与ActiveMQ交互的实用工具,方便用户进行消息的接收和发送操作。 在使用ActiveMQ时,了解以下几个关键知识点是至关重要的: 1. **Java Message Service (JMS)**...
本压缩包“activeMQ收发工具.rar”包含了用于测试和操作ActiveMQ的实用工具,主要是一个jar包文件,方便用户在安装了Java Development Kit (JDK) 的环境中运行。 ActiveMQ收发工具的核心功能是通过Java应用程序发送...
在ActiveMQ中开启jmx监控需要进行一些配置,包括编辑bin/activemq文件和conf/activemq.xml文件,以及设置jmx.password和jmx.access文件的权限。在配置过程中,需要注意jmxremote.port和rmi.port的设置,确保它们不...
在Windows系统上搭建ActiveMQ集群是一项关键的任务,它涉及到分布式消息传递系统的设计和优化。ActiveMQ是Apache软件基金会开发的一款开源消息代理,它遵循Java Message Service (JMS) 规范,提供高可靠的消息传递...
在实际使用中,还需要对ActiveMQ进行深入学习和掌握,包括如何创建和管理消息队列、主题、订阅者以及消息生产者等内容,从而能充分利用ActiveMQ的强大功能,为应用系统提供稳定、高效的消息传递解决方案。...
- **内存配置**:确保运行ActiveMQ的JVM有足够的内存,并合理配置ActiveMQ代理的内存使用限制。 ##### 2. 水平扩展 当单一的ActiveMQ实例无法满足需求时,可以考虑采用水平扩展的方式来增加系统的吞吐量和可用性。...
3. **安全性**:ActiveMQ提供了基于角色的访问控制(RBAC),可设置用户权限,确保只有授权的用户和应用可以访问消息。此外,还支持SSL/TLS加密,保护数据传输的安全。 4. **多种协议支持**:如前所述,ActiveMQ...
配置文件可能包含了ActiveMQ的设置,如连接池大小、存储配置、网络拓扑等,这些都可能影响到ActiveMQ的性能和稳定性。如果包含自定义插件,那么问题可能与这些插件的兼容性或配置有关。 解决ActiveMQ问题通常涉及...
硬件配置包括服务器的CPU、内存和磁盘性能,软件环境包括操作系统、JDK版本、ActiveMQ版本以及JMeter版本等。 2.4 网络环境 网络环境的稳定性和带宽限制可能影响消息传递速度,因此,测试时需确保网络连接的可靠性...
3. **存储策略**:ActiveMQ支持两种存储方式——内存存储和文件存储(默认是KahaDB)。内存存储速度快但不持久,文件存储持久但相对较慢。可以通过配置`<persistenceAdapter>`元素来切换。 4. **网络连接**:...