系统环境:
CentOS release 5.6 (Final)
Netty 3.6.5 final
发现问题:
在一次压力测试中,发现Netty Based服务器连上4500+的clients就开始一直FullGC。
解决问题:
GC日志:
- 2013-07-01T09:24:52.328+0800: 227629.120: [Full GC [PSYoungGen: 116544K->112471K(233024K)] [ParOldGen: 699071K->699071K(699072K)] 815615K->811543K(932096K) [PSPermGen: 15071K->15056K(21248K)], 0.6043590 secs] [Times: user=2.34 sys=0.00, real=0.60 secs]
- 2013-07-01T09:24:52.961+0800: 227629.753: [Full GC [PSYoungGen: 116544K->112514K(233024K)] [ParOldGen: 699071K->699071K(699072K)] 815615K->811586K(932096K) [PSPermGen: 15056K->15056K(21248K)], 0.6133040 secs] [Times: user=2.37 sys=0.00, real=0.61 secs]
看出来年老代已经腾不出空间了。结果很明显,有对象导致了内存泄漏。

本文描述了一次在CentOS 5.6上运行Netty 3.6.5服务器的压力测试中遇到的内存泄漏问题。通过分析GC日志和堆使用情况,发现大量`ConcurrentIdentityHashMap$Segment`对象导致内存占用过高。进一步的jstack分析揭示了5000多个`HashedWheelTimer`线程,每个都有可能导致内存消耗。最终定位到未正确管理和关闭的`HashedWheelTimer`实例是问题根源,并通过修改代码解决问题。
最低0.47元/天 解锁文章
638

被折叠的 条评论
为什么被折叠?



