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

Spring Integration使用Aggregator出现内存泄漏问题咨询

Spring Integration Aggregator堆内存占用居高不下排查点
  • SimpleMessageStore已完成组缓存溢出(最高概率)
    哪怕你设置了expireGroupsUponCompletion=true,SimpleMessageStore内部默认会维护一个无限大小的completedGroups集合,用来存储已经处理完成的消息组ID,避免重复消息被再次归组处理。压测场景下每个请求批次对应唯一的correlation key,这个集合会随着请求量持续增长且没有自动淘汰逻辑,是内存只涨不跌的最常见原因。
    修复方案:构造SimpleMessageStore时调用setCapacityLimit(int capacity)方法,设置合理的已完成组缓存上限,超出阈值后会自动淘汰最早的缓存记录,不会影响正常业务的去重逻辑。
  • 业务逻辑持有消息对象引用
    如果你在Aggregator的自定义处理方法中将消息、消息体对象存放到了长生命周期的容器中(比如静态集合、全局缓存、ThreadLocal没有主动清理),就算消息组被销毁,对象也不会被GC回收。你可以通过JProfiler、MAT等内存分析工具抓取堆快照,排查大对象的引用链是否来自业务代码的持有。
  • MessageGroupStoreReaper配置未生效
    首先确认Reaper实例绑定的MessageGroupStore就是Aggregator使用的实例,避免多实例配置下Reaper扫不到目标存储;其次检查Reaper的调度线程池配置是否正常,有没有出现任务阻塞、执行报错的情况,导致过期组没有被及时清理。
  • 不完整消息组隐式残留
    你使用的SimpleSequenceSizeReleaseStrategy依赖splitter生成的sequenceSize header判断组是否完整,如果压测过程中出现消息丢失、correlation key重复、sequence header被篡改的情况,会产生永远达不到释放条件的残组。你可以在压测过程中每隔10秒调用一次MessageGroupStore.getMessageGroupCount(),确认是否有持续增长的未完成组计数。

内容的提问来源于stack exchange,提问作者Sefa Mert Kaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03