【问题标题】:Apache Camel, Netty4 endpoint as client - memory leakageApache Camel,Netty4 端点作为客户端 - 内存泄漏
【发布时间】:2018-10-17 11:16:17
【问题描述】:

我对 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 heap space。

没有任何路由没有注册内存泄漏,因为我可以将问题集中在 netty-route

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

【问题讨论】:

    标签: java spring memory-leaks apache-camel netty


    【解决方案1】:

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

    也许这可以帮助遇到类似问题的其他人。

    最好的

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多