【问题标题】:Netty 4.0.19.Final Memory Leak with io.netty.channel.ChannelOutboundBuffer$Entry带有 io.netty.channel.ChannelOutboundBuffer$Entry 的 Netty 4.0.19.Final 内存泄漏
【发布时间】:2014-07-13 20:59:45
【问题描述】:

我似乎在使用 Netty 4 时反复出现内存问题。我的应用程序向 Minecraft 服务器查询信息并使用该信息更新数据库。目前它每 10 秒创建 300 个连接请求,如果这些连接成功完成,则发送数据包。

我的查询应用程序的前一个迭代使用 Netty 3.2.5,它连续运行了几个月,没有任何问题。然而,使用 Netty 4,它只运行几个小时就会耗尽所有可用资源。这是通过 JMX 连接进行内存采样的屏幕截图。

正如我们所见,io.netty.channel.ChannelOutboundBuffer$Entry 正在使用大量内存。知道如何解决这个问题吗?如果你们需要,我可以提供代码。谢谢!

Stephen C:这不是“如何查找 Java 内存泄漏”的副本。这与 Netty 特别有关,我并不是想找出如何发现内存泄漏——我已经用 Netty 发现了一个。我已重新发布我的问题,以便有机会获得答案。

【问题讨论】:

  • 你试过 4.0.21.Final 吗?它有很多修复和改进。另外,请分享堆转储。发送电子邮件至 't at motd dot kr'。
  • 是的,请分享堆转储。通过这种方式,我们可以查看更多详细信息。再生产者也会有所帮助。谢谢!
  • 我将尝试 4.0.21.Final 并在几个小时的测试后报告。我将堆转储通过电子邮件发送给了 Trustin。诺曼,直接链接在这里:dl.dropboxusercontent.com/u/6188711/heapdump.hprof
  • 我可以提供重现问题的源代码,但是这个程序本质上会占用大量带宽,而且它不太可能在具有家庭互联网连接的开发机器上正常运行。我也可以提供JMX连接细节供大家使用。
  • Netty 4.0.21.Final 在大约一个小时后崩溃了。同样的原因,我采样到来自Bootstrap.connect

标签: java memory-leaks netty


【解决方案1】:

这可能是由于 reference counted 对象的错误使用(Netty 4 中引入的新原理)。您的频道未正确释放对象。

您可以使用-Dio.netty.leakDetectionLevel=paranoid 在 Netty 中激活自动内存泄漏检测。

在此处查看文档:http://netty.io/wiki/reference-counted-objects.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2018-02-09
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多