netty优化使用-内存泄漏检测,注解,线程模型

本文探讨了Netty中的内存泄漏原因,如忘记释放ByteBuf导致的资源占用。介绍了两种内存检测方法:通过引用计数和使用弱引用。提到了Netty的内存泄漏检测工具及其配置选项。此外,还讨论了Netty的注解特性,如@Sharable、@Skip等,并分析了CPU密集型和IO密集型场景下的线程模型优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

netty内存泄漏是什么

  • 原因:忘记release
    调用ByteBuf buffer=ctx.alloc().buffer();
  • 导致:堆外内存未free和堆内池化内存未归还,占用的资源未释放,导致OOM。
netty内存检测方法:
  • 1.引用计数(buffer.reCnt()), ByteBuf buffer=ctx.alloc().buffer(),引用计数+1,buffer.release() 引用计数-1,等于0时自动释放
  • 2.弱引用 创建ByteBuf时,定义弱引用对象,并加到list中,当引用计数为0时,自动执行释放资源操作,并将弱引用对象从list里面移除
  • 判断:弱引用在list中,那么buffer计数不为0,也就是没有释放,弱引用被回收,可以把弱引用放到ReferenceQueue中,遍历这个队里,就可以知道哪些被回收了
netty内存泄漏检测工具
  • 方法 -Dio.netty.leakDetection.level=PARANOID
  • 注意 1.模式检测级别为SIMPLE,不是每次都检测 2.GC后才有可能检测到 3.上线前用最高级别,上线后用默认级别

netty 注解

  • @Sharable:标识一个Handler提醒是否可以共享,没有这个的话,不能重复加入pipeLine
  • @Skip:标识是否跳过该hand
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值