You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis global-max-size配置后堆内存占用异常咨询

ActiveMQ Artemis 内存分配与分页机制问题分析

测试背景

  • 测试版本:ActiveMQ Artemis 2.37.0、2.41.0
  • 测试目标:验证global-max-size参数在高消息量场景下降低内存消耗的作用
  • 测试场景:100个AMQP生产者(基于jms-qpid 1.13.0),24线程并发发送200条70kb消息,总消息量约1.4GB
  • 核心配置:
    • Xmx=2Gb
    • global-max-size=200Mb
    • address-full-policy=PAGE

观测到的现象

日志显示分页已触发:

2025-06-19 12:23:13,409 INFO  [org.apache.activemq.artemis.core.server] AMQ222038: Starting paging on address '71dfb642-47eb-45de-a6a5-21ccc2c56d38'; size=8686941 bytes (123 messages); maxSize=10485760 bytes (-1 messages); globalSize=211382291 bytes (2993 messages); globalMaxSize=209715200 bytes (-1 messages);

但性能分析显示堆内存占用约1.4GB,与总消息大小接近,NIO和JDBC存储场景下均存在此问题。

疑问解答

1. global-max-size的工作机制是什么?如何配置broker避免将所有消息加载到内存?

global-max-size是broker层面的全局内存阈值,当所有地址的消息总内存占用超过该值时,触发address-full-policy定义的行为(此处为PAGE)。但要注意:分页触发后,新消息会被写入页文件而非留存内存,但已在内存中的消息不会立即被强制换出——只有当内存压力触发GC,或者broker主动清理时,才会将内存中的消息释放到页文件。

要避免所有消息加载到内存,需配合以下配置:

  • 为单个地址设置max-size-bytes,避免单个地址占用过多内存后才触发全局分页
  • 调整page-max-cache-size:降低该参数(默认是5)可减少页缓存占用的内存
  • 启用message-expiry-scan-period,及时清理过期消息,减少内存驻留
  • 合理设置journal-buffer-size,避免journal缓冲区占用过多内存

2. 使用自动创建的地址和队列,堆中大量QueueImpl对象是否为问题诱因?

自动创建地址/队列本身不会直接导致内存飙升,但如果测试中生成大量唯一地址(如日志中的随机地址),每个地址对应一个QueueImpl实例,且每个实例会维护自身的消息元数据、分页状态等信息,当地址数量过多时,这些对象的累计内存占用会很可观。

此外,自动创建的队列默认配置可能未优化(比如未设置单个队列的max-size-bytes),导致单个队列无限制占用内存,直到全局阈值触发分页,这也会加剧内存压力。建议:

  • 避免动态创建大量唯一地址,尽量复用固定地址
  • 配置address-settings模板,为自动创建的地址/队列预设合理的max-size-bytes、page-size-bytes等参数

3. 启动消费者后堆内存大幅下降(约3-4倍),调整page-size-bytes=1M和max-read-page-bytes=2M后堆内存减半(无外部读取),该现象原因是什么?

  • 启动消费者后内存下降:消费者拉取消息时,broker会将内存中的消息递送给消费者,同时将对应的消息从内存中移除(或标记为可GC)。如果消息已分页,broker会从页文件中读取消息并递送给消费者,此时内存中的缓存页会被释放,加上消息对象本身被消费后不再占用内存,因此堆内存会大幅下降。
  • 调整分页参数后内存减半:默认page-size-bytes是10MB,max-read-page-bytes是20MB。调小这两个参数后,单个页文件的大小变小,broker在处理分页时,内存中缓存的页数据量减少。即使没有外部读取,broker在管理分页状态时,会将超出缓存限制的页数据刷到磁盘,同时释放对应的内存空间,因此堆内存会降低。

内容的提问来源于stack exchange,提问作者sergey.fedechkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:38