java netty 内存泄露_Netty开发调试设置io.netty.leakDetection.level=PARANOID定位内存泄漏问题...

本文介绍了在Java Netty中遇到内存泄漏日志时如何通过设置`io.netty.leakDetectionLevel`为`PARANOID`来加强检测,并提供详细信息定位问题。Netty的内存泄漏检测有四个级别,PARANOID级别适用于调试,可显示具体泄漏位置。建议在开发调试阶段启用此设置,并确保正确释放ByteBuf,以避免内存泄漏。
摘要由CSDN通过智能技术生成

偶然一次再测试环境看到netty出现内存泄漏的日志,报错信息如下:

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()

看到这个错误,看不出内存泄漏的位置。但在环境里也没有设置

-Dio.netty.leakDetectionLevel=advanced

这个问题在测试环境出现还好,如果在生产环境那就糟糕了。所以怎么可以今早在开发过程中就发现以及定位到内存泄漏的问题呢?

Netty的内存泄漏检测分为四个级别:

DISABLED - 完成禁止检测内存泄漏,这个是不推荐。

SIMPLE - 如果buffer中出现1%的内存泄漏,打印错误日志,就是上面那样。但是日志是看不到详细在什么位置出现了内存泄漏。鉴于性能考虑,这个是在生产环境中默认使用。

ADVANCED - 如果buffer的1%出现内存泄漏,打印错误,并且输出详细的内存泄漏信息。

PARANOID - 这个和ADVANCED输出的内容是一样的,但它会对每一次请求的buffer做检查。很适用于调试和单元测试。

建议

1、为了今早的发现问题,强烈建议在开发调试过程中,把检测级别设为PARANOID,设

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值