此转储中netty normal的内存使用情况?

时间:2012-03-09 15:51:55

标签: java memory netty

对于13K用户,我有以下内存转储。我将粘贴前7位消费者。 Netty似乎消耗了太多内存。这是正常的吗?

(Netty版本:3.2.7,实现IdleStateAwareChannelUpstreamHandler,总内存Netty内存使用量:最小2.5GB)

 num     #instances         #bytes  class name
----------------------------------------------
   1:      23086640      923465600  org.jboss.netty.util.internal.ConcurrentHashMap$Segment
   2:      28649817      916794144  java.util.concurrent.locks.ReentrantLock$NonfairSync
   3:      23086640      554864352  [Lorg.jboss.netty.util.internal.ConcurrentHashMap$HashEntry;
   4:        118907      275209504  [I
   5:       5184704      207388160  java.util.concurrent.ConcurrentHashMap$Segment
   6:       5184704      130874832  [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
   7:       1442915      115433200  [Lorg.jboss.netty.util.internal.ConcurrentHashMap$Segment;

1 个答案:

答案 0 :(得分:1)

看起来内存使用情况不正常。

以下是有关Netty内存使用情况的一些事实

  • 一个频道有两个ReentrantLocks,(一个读锁定,一个写锁定)

  • 频道存储a中的所有频道参考 org.jboss.netty.util.internal.ConcurrentHashMap内部和自动 关闭时移除(这是指定唯一的通道ID)。

  • ChannelGroup在添加()的org.jboss.netty.util.internal.ConcurrentHashMap中存储频道引用,并在关闭时自动删除。

  • ConcurrentHashMap$HashEntry中每个项目会有一个org.jboss.netty.util.internal.ConcurrentHashMap

因此,如果您的处理程序没有泄漏任何引用,您可以计算预期的内存使用量。