对于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;
答案 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
。
因此,如果您的处理程序没有泄漏任何引用,您可以计算预期的内存使用量。