netty堆外內(nèi)存監(jiān)控

  • 直接new DirectMemReporter().startReport();調(diào)用就可以了

netty4.1x默認(rèn)使用池化的bytebuf,每個(gè)池子初始16mb,使用直接內(nèi)存的最大池子數(shù)默認(rèn)16,由jvm啟動(dòng)參數(shù)決定-Dio.netty.allocator.numDirectArenas。默認(rèn)最大堆外內(nèi)存默認(rèn)3817865216 bytes,由-Dio.netty.maxDirectMemory決定

@Slf4j
public class DirectMemReporter {
    private AtomicLong directMem = new AtomicLong();
    private ScheduledExecutorService executor = MoreExecutors.getExitingScheduledExecutorService(
            new ScheduledThreadPoolExecutor(1), 10, TimeUnit.SECONDS);

    public DirectMemReporter() {
        Field field = ReflectionUtils.findField(PlatformDependent.class, "DIRECT_MEMORY_COUNTER");
        field.setAccessible(true);
        try {
            directMem = (AtomicLong) field.get(PlatformDependent.class);
        } catch (IllegalAccessException e) {}
    }

    public void startReport() {
        executor.scheduleAtFixedRate(() -> {
            log.info("netty direct memory size:{}b, max:{}", directMem.get(), PlatformDependent.maxDirectMemory());
        }, 0, 1, TimeUnit.SECONDS);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容