Netty Ssl长连接内存使用问题

wanyanxgf 2012-12-05 06:23:04
本人最近在维护一个长连接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]);
...
}


大家有没有什么好的办法去把这部分内存的消耗减小一些呢?
...全文
730 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanyanxgf 2012-12-10
  • 打赏
  • 举报
回复
引用 4 楼 huaye2007 的回复:
你看到那个包没有,那个engineInputRecord是sun的类,和netty是没有关系的,所以要是出现这个问题,应该早就被发现了,应该是你其他地方有问题吧!
确实有人报这个bug,不过说要等jdk8再修改... http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=b497043127a6fffffffffbac53f1570412f7?bug_id=6581437
huaye 2012-12-10
  • 打赏
  • 举报
回复
你看到那个包没有,那个engineInputRecord是sun的类,和netty是没有关系的,所以要是出现这个问题,应该早就被发现了,应该是你其他地方有问题吧!
wanyanxgf 2012-12-10
  • 打赏
  • 举报
回复
引用 2 楼 huaye2007 的回复:
查看是否频繁write消息,。如果频繁广播消息,则直接用channelBuffer
write不多,多数连接仅维持2分钟一次的心跳。查看api中也没有相关的方法可以设置,是直接代码里面硬编码的一个数字,正尝试修改class文件的内容,把这个数字改小一些。
huaye 2012-12-09
  • 打赏
  • 举报
回复
查看是否频繁write消息,。如果频繁广播消息,则直接用channelBuffer
huaye 2012-12-09
  • 打赏
  • 举报
回复
看能否重用,或者是否提供了API,设置大小值。

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧