netty处理数据库时发生内存泄露

村西埋个地雷 发布于 2016/10/27 18:47
阅读 620
收藏 0

我的业务是 单片机发送字符串1给服务器,服务器解析后,存入数据库,并且从数据库查询一些字段信息立刻返回给单片机。

当用压力测试软件测试1000个时,会出现严重: LEAK: ByteBuf.release() was not called before it's garbage-collected.
Enable advanced leak reporting to find out where the leak occurred. 
To enable advanced leak reporting, specify the JVM option 
'-Dio.netty.leakDetectionLevel=advanced' or call ResourceLeakDetector.setLevel() 
See http://netty.io/wiki/reference-counted-objects.html for more information.的错误。

求助

加载中
0
银杏卡卡
银杏卡卡
你用了大量被缓存的ByteBuf都没有调用其release回收到对象池中,这些对象存在于对象池,不会被GC自动回收,故而内存爆满
hrdxwandg
hrdxwandg
谢谢BoXuan的方法,解决了我的问题
村西埋个地雷
村西埋个地雷
回复 @BoXuan : 谢谢您这么耐心的回答 希望您的这些答案能帮助别人!谢谢!
银杏卡卡
银杏卡卡
回复 @村西埋个地雷 : if(buf instanceof AbstractReferenceCountedByteBuf) { buf.release(); } 直接用Unpooled.buffer创建的ByteBuf还内存溢出我也不知道原因了,抱歉!
村西埋个地雷
村西埋个地雷
回复 @BoXuan : 我试了下 还是出现了内存泄露的提示。。。
银杏卡卡
银杏卡卡
回复 @村西埋个地雷 : 看下我上面回复,我建议你直接用Unpooled.buffer(100)这个方式创建ByteBuf对象,这个创建的不要调用release()方法。
下一页
0
a
aimeryxie

这是一个非常有区别于java的问题,的有c的思路,用ByteBuf必须自己手动去回收,否则会oom的。

a
aimeryxie
一般在用完之后释放一下 ReferenceCountUtil.release(writeBuffer);
返回顶部
顶部