繁体   English   中英

Apache Camel,Netty4端点作为客户端-内存泄漏

[英]Apache Camel, Netty4 endpoint as client - memory leakage

我对Apache Camel并不陌生,并试图将一些路线付诸实践。 我有一个TCP服务器,该服务器提供大型JSON消息(最大大小约为30-50kB,其中我对源大小没有任何控制权),其中包含很多测量数据,我想使用某些有效的附加路由进行处理精细。 我在spring-boot环境1.5.7中使用骆驼2.20。 我遇到的问题是,如果我注释掉除传入的减少的netty4路由(仅往返于计数器)之外的所有其他路由,请参见下文

@Bean
public RouteBuilder getRoute() {
    String fromSource = String.format("netty4:tcp://%s:%d?clientMode=true&textline=true&receiveBufferSize=64000&decoderMaxLineLength=64000",sourceIp,sourcePort);
    return new RouteBuilder() {
        from(fromSource)
        .to("metrics:counter:incomingCounter");


    };
}

该路由几乎可以正常工作,但是会消耗越来越多的堆空间(每秒约2MB,其中消息以大约20-30Hz的频率提供服务),直到java抛出java.lang.OutOfMemoryError:Java堆空间。

如果没有任何路由,则不会记录任何内存泄漏,因为我可以将问题集中在netty-route上

任何帮助将不胜感激。 提前致谢。

我自己通过调试代码找到了解决方案。 我忘了在netty4-camel端点中设置属性sync = false ,因为我不想处理消息并在处理后将答案发送回服务器,只是消耗-而sync = true(默认设置)会缓冲所有传入数据以供以后使用引起我的“内存泄漏”的响应。 从netty4-camel文档( http://camel.apache.org/netty4.html )中,“ sync”的行为尚不完全清楚-我将建议对该文档进行改进(将写有建议的邮件)使用法更加清楚。

也许这可以帮助另一个遇到类似问题的人。

最好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM