本人最近在维护一个长连接server端,通过netty实现,用ssl加密。
现在每台服务器一个jvm,每个jvm开了3G的内存,每台server上10w长连接左右。当前问题是jvm的内存使用长期保持在2.6G左右,并且fullGC执行频繁,导致server的承载能力达到极限。
把内存dump下来之后分析,多数的内存被NioAcceptedSocketChannel占用
查看NioAcceptedSocketChannel中内存的使用,发现被ssl的engineInputRecord中的一个很大的byte缓存占用掉了,而且一直没释放
查询这个byte来源,发现是每次在new一个inputRecord的时候会new出一个很大的byte(maxRecordSize=16665)
InputRecord() {
super(new byte[maxRecordSize]);
...
}
大家有没有什么好的办法去把这部分内存的消耗减小一些呢?