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

Aeron集群空闲时堆内存占用增长的原因咨询

Aeron空闲时堆内存持续增长问题分析

问题背景

我们采用Aeron库开发,在系统完全空闲状态下监控堆内存使用情况,发现堆内存占用量持续增长。相关日志记录及内存监控情况如下:

日志记录

{"log":"the prevVal of Failed attempts to free log buffers is: 0.0 ","stream":"stdout","time":"2022-12-19T04:00:29.992379754Z"}
{"log":"we try to get Sender flow control limits, i.e. back-pressure events value and put it as aeron_sender_flow_control_limits__i_e__back_pressure_events ","stream":"stdout","time":"2022-12-19T04:00:29.992383872Z"}
{"log":"the currentValue of Sender flow control limits, i.e. back-pressure events is: 36 ","stream":"stdout","time":"2022-12-19T04:00:29.992387994Z"}
{"log":"the prevVal of Sender flow control limits, i.e. back-pressure events is: 36.0 ","stream":"stdout","time":"2022-12-19T04:00:29.99239165Z"}
{"log":"we try to get Unblocked Publications value and put it as aeron_unblocked_publications ","stream":"stdout","time":"2022-12-19T04:00:29.992395649Z"}

内存监控情况

内存监控图显示:堆内存占用随时间呈持续上升趋势,无明显的GC回收下降阶段,即使系统处于完全空闲状态,增长趋势仍未停止。

可能原因及排查建议

可能原因

  1. Aeron资源未正确释放:若Publication、Subscription或Aeron实例未在空闲时调用close()方法,这些资源持有的内存无法被回收,导致堆内存持续占用。
  2. 自定义监控采集逻辑内存泄漏:日志中显示存在自定义的Aeron指标采集代码,若采集逻辑每次执行都创建新对象(如字符串、集合)且未被GC及时回收,高频采集会导致堆内存缓慢增长。
  3. Aeron后台线程资源未清理:Aeron的后台清理线程(如BufferCleaner)可能持有未释放的对象引用,或线程本地缓存未清空,导致内存无法回收。
  4. 日志框架内存开销:若日志输出频率过高,且日志框架配置不当,日志事件对象累积无法回收,也会导致堆内存增长。
  5. Aeron版本问题:使用的Aeron版本存在已知内存泄漏BUG,旧版本在特定场景下可能出现空闲时内存增长的情况。

排查建议

  • 核对Aeron资源生命周期:确认所有Aeron相关资源在系统空闲时已完全关闭释放。
  • 抓取堆内存快照:使用jmap、JProfiler等工具分析堆内存,定位占比最高的对象类型,确定内存增长来源。
  • 检查监控采集代码:梳理自定义指标采集逻辑,排查是否存在重复创建对象、未释放资源的情况。
  • 升级Aeron版本:切换至官方最新稳定版本,验证是否存在版本相关的内存泄漏问题。
  • 优化日志配置:调整日志输出频率,检查日志框架是否存在对象累积未回收的情况。

内容的提问来源于stack exchange,提问作者Masoud Basirati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:50:23