前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java netty获取堆外内存占用

Java netty获取堆外内存占用

作者头像
天涯泪小武
发布2021-12-09 19:13:39
1.1K0
发布2021-12-09 19:13:39
举报

在使用了netty的系统中,有时会出现内存泄露的问题,我们就需要去监控这个堆外内存的占用,以排查是否是堆外泄露,下面的代码就是查看堆外内存的。可以写个定时任务,持续调用doReport方法来获取堆外内存。

init方法在项目初始化时调用一次,后续不要重复调用。

netty版本需要4.1以上

import io.netty.util.internal.PlatformDependent;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;

import javax.annotation.PostConstruct;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @date 2020/10/19 11:14 上午
 */

public class DirectMemoryReporter {
    private static final String BUSINESS_KEY = "netty_direct_memory";
    private AtomicLong directMemory;
    
    public void init(){
        Field field = ReflectionUtils.findField(PlatformDependent.class,"DIRECT_MEMORY_COUNTER");
        field.setAccessible(true);
        try{
            directMemory = ((AtomicLong)field.get(PlatformDependent.class));
        }catch (Exception e){

        }
    }

    public void doReport(String processName){
        try{
            long memoryInb = directMemory.get();
            logger.error(processName + "**********" + BUSINESS_KEY + ":" + memoryInb);
        }catch (Exception e){

        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档