ActiveMQ在Queue积压消息后内存占用上涨的原因

ActiveMQ在Queue积压消息后内存占用上涨的原因

现象:

​ 我们使用ActiveMQ是用数据库持久化消息的,数据库空间充裕,理论应该queue应该可以堆积几百个G的消息,可是发现堆积几个G的消息后,amq服务的内存便上涨至设置的70%临界点,最终影响发送broker的速度,从而影响整个生产流程。

原因分析:

​ 通过查ActiveMQ内存使用方面的资料,发现从ActiveMQ 5.0.0版本开始,ActiveMQ默认使用Store-based cursors的游标方式来处理在大量堆积的消息。在正常消费速度大于发送速度的时候,消息发送到broker时,先保存在持久存储中,然后直接把消息存放在内存中的LinkedHashMap,很快被消费者消费后清除内存和持久存储,存储中的消息数量会很少,所以并不使用游标。而当消费慢于发送的时候,消息发送到broker时,先保存在持久存储中,然后存在游标里,当需要消息的时候,消息将会以页为单位,从一个挂起的游标(pending cursor)进入LinkedHashMap。这样随着消息的堆积对内存的占用会越来越大。

解决:

​ 可以增大amq内存,具体配置在服务端bin里env

ACTIVEMQ_OPTS_MEMORY="-Xms4G -Xmx4G"

本文地址:https://blog.csdn.net/renhuan28/article/details/84874946

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值