背景、netty抛出完整的error信息如下:

2018-02-08 14:30:43.098 [nioEventLoopGroup-5-1] ERROR io.netty.util.ResourceLeakDetector:176 - 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.leakDetection.level=advanced' or call ResourceLeakDetector.setLevel() See http://netty.io/wiki/reference-counted-objects.html for more information.

一、结论很直观:内存泄露了

再读读提示:获取更多的信息有两种方法

1. 增加启动jvm参数-Dio.netty.leakDetection.level=advanced

java -jar -Dio.netty.leakDetection.level=advanced your-server.jar

或者

java -jar -Dio.netty.leakDetectionLevel=ADVANCED your-server.jar 

2. 在程序启动时增加相关日志信息

...省略代码...try {ServerBootstrap sbs = new ServerBootstrap().group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).handler(new LoggingHandler(LogLevel.INFO)).localAddress(new InetSocketAddress(port)).childHandler(new ChannelInitializer<SocketChannel>() {protected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS));ch.pipeline().addLast(idleStateTrigger);ch.pipeline().addLast("decoder", new MessageDecoder());ch.pipeline().addLast("encoder", new MessageEncoder());ch.pipeline().addLast(serverHandler);};}).option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true);ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED);ChannelFuture future = sbs.bind(port).sync();...省略代码...

二、这两种方式都能跟踪到内存泄露时的更多的抛出信息

Recent access records: 2
#2:
io.netty.buffer.AdvancedLeakAwareByteBuf.readBytes(AdvancedLeakAwareByteBuf.java:498)
io.netty.buffer.ByteBufInputStream.read(ByteBufInputStream.java:179)
com.esotericsoftware.kryo.io.Input.fill(Input.java:164)
com.esotericsoftware.kryo.io.Input.require(Input.java:196)
com.esotericsoftware.kryo.io.Input.readVarInt(Input.java:373)
com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:127)
com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693)
com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:804)
com.your.package.base.serialize.KryoSerializer.deserialize(KryoSerializer.java:54)
com.your.package.base.link.MessageDecoder.decode(MessageDecoder.java:53)
io.netty.handler.codec.LengthFieldBasedFrameDecoder.decode(...)

三、解决问题

分析日志,建议从自己的代码入手,然后将造成内存泄露的ByteBuf手动释放。

ReferenceCountUtil.release(byteBuf);

netty LEAK: ByteBuf.release() was not called before it's garbage-collected相关推荐

  1. Netty谈谈ByteBuf

    前言 在网络传输过程中,字节是最基本也是最小的单元.JAVA NIO有提供一个ByteBuffer容器去装载这些数据,但是用起来会有点复杂,经常要在读写间进行切换以及不支持动态扩展等等.而netty为 ...

  2. Netty 的 ByteBuf 是如何支持 堆内存非池化 实现的

    Netty的ByteBuf是如何支持堆内存非池化实现的 ByteBuffer 从实现方式上分成 HeapByteBuffer 和 DirectByteBuffer 两种内存实现方式, HeapByte ...

  3. Netty 教程 – ByteBuf详解

    ByteBuffer存在的问题 ByteBuffer是JDK1.4中提供的java.nio.Buffer, 在内存中预留指定大小的存储空间来存放临时数据,其他Buffer的子类有:CharBuffer ...

  4. Netty(九)——ByteBuf源码之析

    ByteBuf在Netty占据着中重要的位置,上篇<Netty--ByteBuf功能之说>讲了ByteBuf的工作原理和重要功能介绍.这篇从源码的角度来看ByteBuf.首先,来看一下主要 ...

  5. Netty之ByteBuf详解

    1. ByteBuf的创建 在Netty中,有一个比较常见的对象ByteBuf,它其实等同于Java Nio中的ByteBuffer,但是ByteBuf对Nio中的ByteBuffer的功能做了很作增 ...

  6. Netty中ByteBuf 的零拷贝

    转载:https://www.jianshu.com/p/1d1fa2fe1ed9 此文章已同步发布在我的 segmentfault 专栏. 根据 Wiki 对 Zero-copy 的定义: &quo ...

  7. Netty Associated -- ByteBuf

    ByteBuf ByteBuf是Netty的Server与Client之间通信的数据传输载体.他提供了一个byte数组(byte[])的抽象视图 buffer创建 我们推荐通过一个Unpooled的帮 ...

  8. Netty中ByteBuf的copy、duplicate、slice方法对比

    Jdk注释翻译 /** *返回ByteBuf的可读字节的拷贝.修改返回的ByteBuf内容与当前ByteBuf完全不会相互影响. *此方法不会修改当前ByteBuf的readerIndex或write ...

  9. vld for memory leak detector (release version)

    有没有这样的情况,无法静态的通过启动和退出来查找内存泄露,比如网络游戏,你总不能直接关游戏那玩家怎么办? 现在vld支持release,我们可以动态的找. 1.在release版本使用vld了.< ...

  10. 【Netty4】netty ByteBuf (二) 引用计数对象(reference counted objects)

    原文出处:http://netty.io/wiki/reference-counted-objects.html 相关文章: netty ByteBuf (一)如何创建ByteBuf对象 netty ...

最新文章

  1. 怎么读懂python语句_Python入门基础知识点总结,一点文章就能让你看懂Python
  2. 七、内存优化(4)性能计数器
  3. vue解决线上跨域的问题_vue前后端分离解决跨域问题
  4. SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点
  5. 华为鸿蒙OS合作方,华为发布鸿蒙OS元服务,超300家应用合作伙伴加入
  6. C#访问postgresql数据库类MyPostDB的实现
  7. 开源短地址_如何在短短5分钟内完成您的第一个开源贡献
  8. js获取a标签的value值_js逆向 | 某住房网跳转链接生成逻辑分析
  9. vue仿微博评论回复_Vue之 3.0升级
  10. C#代码实现矢量画图
  11. 当年上大学时,编程老师让我们用html+CSS实现一个天猫官网
  12. IT运维服务体系建设思路
  13. Android 音频源码分析——audioserver启动
  14. wincc c 语言改颜色,wincc常用c脚本小草设置
  15. mysql本地localhost连接不上
  16. 制作一个简单的音乐播放器
  17. HDU 3003 Pupu
  18. 详解拦截器和过滤器的区别
  19. mongo vue 破解
  20. 一、JavaScript回顾

热门文章

  1. ffmpeg格式转换命令
  2. MapReduce实战(三)分区的实现
  3. Chrome 开发者工具(DevTools)中所有快捷方式列表
  4. 手机网站和PC网站兼容的响应式网页设计
  5. 《BI那点儿事》数据流转换——百分比抽样、行抽样
  6. lsb_release -a linux查看版本未找到命令
  7. java-weixin-tools接入微信
  8. 一张图学会Python3的基本用法
  9. 软件需求与分析——大二下需会知识点
  10. 【译】ObjectBox官方文档(4)——关系