【问题标题】:Netty Server Push Usage and Memory LeakNetty 服务器推送使用和内存泄漏
【发布时间】:2013-05-28 23:09:16
【问题描述】:

我现在使用 Android 作为我的 Netty 客户端。和 Windows 作为我的 Netty 服务器。 最近,我在 Netty 上发现了一个奇怪的行为。 当我打开服务器端应用程序时,内存只有 30MB。 但几个小时后,它上升到300M。与原始内存使用量相比,它的 10 倍。 打开服务器的时间越长,它增加的内存就越多。

我不知道为什么会这样。正常吗?

顺便说一下,由于 Netty 不支持内置的服务器推送功能。 所以我使用静态方法将所有Channel存储在map中:

public static final Map<Integer, Channel> mapConcurrentIdChannel = new ConcurrentHashMap<Integer, Channel>();

我将频道 ID 映射到频道。 例如:每当客户端 A 想向客户端 B 推送消息时,服务器会找到通道 id 从而获取 Channel 实例,然后使用 Channel.write(object) 方法。 这是在 Netty 中实现推送消息功能的正确方法吗? (如果没有,您能否提出一个实现推送功能的好方法?因为没有官方文档提及) 另外,我担心这种实现会导致我之前解释过的“内存泄漏问题”。

关于使用 ChannelGroup:
我的场景是如果有 5 个人,A、B、C、D、E。有时,A 想向 C 发送消息,有时 B 想向 E 发送消息。 我无法预测某人何时将消息发送给某人以及他们将发送给谁。所以我不能将所有 5 个人(连接)添加到 ChannelGroup,写入该组会将消息广播给每个人。

我在 Google 上搜索了很长时间,但对我现在面临的问题没有任何帮助。 希望听到 Netty 经验丰富的开发人员的一些建议,你!!

谢谢!!

【问题讨论】:

  • 您找到解决方案了吗?如果你分享会很棒

标签: memory-leaks push-notification push netty nio


【解决方案1】:

我认为您想为此使用 ChannelGroup[1],这基本上也只是使用 ConcurrentMap put 确保 Channel 在关闭时被删除等。

[1]http://netty.io/3.6/api/org/jboss/netty/channel/group/DefaultChannelGroup.html

【讨论】:

  • 感谢您的回复。我的场景是如果有 5 个人,A、B、C、D、E。有时,A 想给 C 发消息,有时 B 想给 E 发消息。我无法预测什么时候有人会发消息给某人以及他们将派谁。所以我不能将所有 5 个人(连接)添加到 ChannelGroup,写入该组会将消息广播给每个人。有没有办法解决这类问题?
  • 我应该创建一个保存所有连接的主通道组。每当客户端 A 想连接客户端 C 时,在 Main ChannelGroup 中搜索 A 和 C,然后将 A 和 C 添加到新的 ChannelGroup 中? BTW,在检查代码后,我认为内存问题可能来自另一个与 Netty 无关的组件。
猜你喜欢
  • 2011-06-22
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2011-02-18
相关资源
最近更新 更多