ActiveMQ内存设置和流控
启动脚本设置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中设置的数量。
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");
ActiveMQ内存设置和流控的更多相关文章
- 性能百万/s:腾讯轻量级全局流控方案详解
WeTest 导读 全新的全局流控实现方案,既解决了目前流控的实现难点,同时保证运行稳定且流控准确的前提下,实现更简单,部署成本更低,容灾能力更强. 该方案组件化之后,可以推广到别的有需要的部门使用, ...
- 性能百万/s:腾讯轻量级全局流控方案详解【转自Wetest】
阿里用的方案是在nginx中配置限流(限流功能模块是自己开发的),流量统计线上是有监控打通的,具体的限流值是通过线上流量表现+线下性能测试(模拟线上场景)测试得出的. 全新的全局流控实现方案,既解决了 ...
- 什么!Sentinel流控规则可以这样玩?
项目源码地址:公众号回复 sentinel,即可免费获取源码 前言 上一篇文章中,我们讲解了关于sentinel基本介绍以及流控规则中直接和快速失败的效果,有兴趣的可以去看上一篇文章,今天,我们给大家 ...
- sentinel的四种流控规则介绍
sentinel的四种流控规则介绍 今天的内容我们主要围绕四个点进行展开介绍. 流控模式 :关联.链路 流控效果 :Warm Up.排队等待 这四点具体是什么意思呢? 首先启动项目:cloud-ali ...
- Linux串口设备树硬件、软件流控设置
/********************************************************************** * Linux串口设备树硬件.软件流控设置 * 说明: ...
- 统一流控服务开源-1:场景&业界做法&算法篇
最近团队在搞流量安全控制,为了应对不断增大的流量安全风险.Waf防护能做一下接入端的拦截,但是实际流量会打到整个分布式系统的每一环:Nginx.API网关.RPC服务.MQ消息应用中心.数据库.瞬间的 ...
- 又拍云张聪:OpenResty 动态流控的几种姿势
2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...
- 阿里云应用高可用服务 AHAS 流控降级实现 SQL 自动防护功能
在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU.LOAD 异常.系统资源耗尽.线上生产环境出现慢 SQL 往往有很多原因: 硬件问题.如网络速度慢,内存不足,I/O 吞 ...
- Sentinel流控与熔断
参考: https://thinkwon.blog.csdn.net/article/details/103770879 项目结构 com.guo ├── guo-sentinel ...
随机推荐
- ubuntu中文版切换为英文后字体变化问题解决
为了熟悉更多Linux 的英语词汇,希望把Ubuntu 的界面换成英文的.使用System->Administration->Language Suport( 系统-> 管理-> ...
- 使用代理下载Android SDK
hx.gy:1080是红杏公益服务器,方便科学工作者访问一些常用的科学网站. 在Android SDK Manager中选择[Tools]->[Options],如下设置: HTTP Proxy ...
- vs2013下使用Assist X的破解方法
Assist X的破解下载:http://pan.baidu.com/s/1kTnDH23 密码:j9jp 01.安装,点击VA_X_Setup2042.exe 安装 02.破解 找到这样的目录:C: ...
- HAProxy 的负载均衡服务器,Redis 的缓存服务器
问答社区网络 StackExchange 由 100 多个网站构成,其中包括了 Alexa 排名第 54 的 StackOverflow.StackExchang 有 400 万用户,每月 5.6 亿 ...
- [转载]常用Web Service汇总(天气预报、时刻表等)
下面总结了一些常用的Web Service,是平时乱逛时收集的,希望对大家有用. ============================================ 天气预报Web Servic ...
- eclipse, Log4j配置(真心的详细~)
转自: http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html a). 新建Java Project>>新建pa ...
- [杂题]CSUOJ1274Balls and Boxes
题目链接 题意:中文题 题意不多赘述 值得注意的是n<m 不必考虑n==m的情况 (m是盒子个数, n是每次选取的盒子个数, 不要弄反了!) 这题一看就是同余方程 每次选取n个盒子放球 也就是说 ...
- TYPE C PD测试板 UFP测试板
- SQL Server中时间段查询和数据类型转换
不知道什么时候对数据独有情种,也许是因为所学专业的缘故,也许是在多年的工作中的亲身经历,无数据,很多事情干不了,数据精度不够,也很多事情干不了,有一次跟一个朋友开玩笑说,如果在写论文的时候,能有一份独 ...
- mybatis UpdateByExampleMapper UpdateByExampleSelectiveMapper
/** * 通用Mapper接口,Example查询 * * @param <T> 不能为空 * @author liuzh */ public interface UpdateByExa ...