首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Netty HashedWheelTimer过剩导致内存泄漏的排错

2013-07-08 
Netty HashedWheelTimer过多导致内存泄漏的排错??发现很多timer线程,足足有5006个。?思考:测试压了5000个链

Netty HashedWheelTimer过多导致内存泄漏的排错

?

?

发现很多timer线程,足足有5006个。

?

思考:测试压了5000个链接,也就是说timer/channel。可能这两者有关联,先解决timer问题。

?

查看new?HashedWheelTimer的代码,发现有一处代码在每次连接时new了一个HashedWheelTimer,但是没有使用,fix it。(当然过程稍微复杂,没写的这么简单)

?

接着想线程跟内存泄漏的联系,看源码最实际,于是发现了这些timer是怎么把内存吃掉的。

?

默认每个Wheel有512个槽位,每个槽是一个MapBackedSet,每个MapBackedSet包含一个ConcurrentIdentityHashMap,每个ConcurrentIdentityHashMap默认大小为4。

?

?

for (int i = 0; i < wheel.length; i ++) {            wheel[i] = new MapBackedSet<HashedWheelTimeout>(                    new ConcurrentIdentityHashMap<HashedWheelTimeout, Boolean>(16, 0.95f, 4));        }

?

512 × 5000 × 4 =?10240000

?

很接近于10252320这个数字。OK,所有问题都解决了~!

?

?

?

?

?

热点排行