netty5学习笔记-内存泄露检测

本文介绍了Netty中的内存泄露检测机制,重点关注ResourceLeakDetector的四级检测模式:DISABLED、SIMPLE、ADVANCED和PARANOID。内容包括如何修改检测级别、检测原理以及在生产环境中使用时的注意事项。此外,文章还指出了leakCheckCnt字段的线程安全性问题。
摘要由CSDN通过智能技术生成

        netty中用到内存泄露检测的地方主要有:1、CompositeByteBuf;2、HashedWheelTimer;3、继承AbstractByteBufAllocator的几个类。

下面我们看看netty里的内存检测类ResourceLeakDetector的具体实现:

netty的内存泄露检测分为四级:

DISABLED: 不进行内存泄露的检测;

SIMPLE: 抽样检测,且只对部分方法调用进行记录,消耗较小,有泄漏时可能会延迟报告,默认级别;

ADVANCED: 抽样检测,记录对象最近几次的调用记录,有泄漏时可能会延迟报告;

PARANOID: 每次创建一个对象时都进行泄露检测,且会记录对象最近的详细调用记录。是比较激进的内存泄露检测级别,消耗最大,建议只在测试时使用。

      如果需要修改默认的检测级别,可以通过:1、调用静态方法setLevel进行修改;2、设置启动参数io.netty.leakDetectionLevel。

      由于内存泄露主要是对某一类资源的检测,因此对于同一类的对象,只需实例化一个ResourceLeakDetector, 否则起不到检测的作用。

public class HashedWheelTimer implements Timer {
    ...
    private static final ResourceLeakDetector<HashedWheelTimer> leakDetector =
            new ResourceLeakDetector<HashedWheelTimer>(
                    HashedWheelTimer.class, 1, Runtime.getRuntime().availableProcessors() * 4);
    ...
初始化的时候需要设置被检测的类(或其他文字标记)、抽样间隔、最大活跃对象数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值