我的团队有一个运行(非常简单)的服务通过Apache骆驼运行,功能上一切都测试正常,但负载测试表明,该服务随着时间的推移会消耗内存。深入研究堆转储的结果是,内存消耗来自机库。看起来,通过路线发送的每一个交易所都被保留,但我们无法确定为什么在路线完成并且交易成功交付后应该保留交易所的任何理由。为什么骆驼在inflightrepository中保留交换?
我的团队对问题的最初反应是膝关节内存泄漏,但我不相信这是事实 - 我们只是有一个意想不到的行为 - 引用垃圾收集不会尝试处理它们。
难题在于它不仅仅是交换的一个副本,它似乎被保留,它是交换生命周期中保留的每一步,而路由并不特别复杂,它实现了分离 - 聚合路线,然后夸大了问题。
我们已经考虑添加一个组件来冲洗inflightrepository中的陈旧交换,但是这没有想到这一点。
任何人都可以解释为什么骆驼表现得像这样?
没有代码?我没有看到我的路线上的这种行为。 – Namphibian
如果不提供服务的完整代码 - 本身就有大量的代码,那么提供一些代码段就相当没有意义。这不是问题 - 骆驼保留机上交流的原因是什么?也许“骆驼什么时候从inflightrepository中删除交换?”将是一个更好的问题... – Julian
我还没有看到这种行为。 – Namphibian