123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package com.tidecloud.dataacceptance.service;
- import io.netty.util.internal.PlatformDependent;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ReflectionUtils;
- import javax.annotation.PostConstruct;
- import java.lang.reflect.Field;
- import java.util.Date;
- import java.util.Timer;
- import java.util.TimerTask;
- import java.util.concurrent.atomic.AtomicLong;
- /**
- * 日志更新
- */
- @Service
- public class DirectMemoryReporterImpl {
- private static final int _ik = 1024;
- private static final String BUSINESS_KEY = "netty_direct_memory";
- private AtomicLong directMemory;
- private Long maxDirectMemory;
- private static Logger logger = LoggerFactory.getLogger(DirectMemoryReporterImpl.class);
- @PostConstruct
- public void init() {
- // TODO ( 设置netty 参数 复现 OutOfDirectMemoryError 异常 -Dio.netty.maxDirectMemory = 1938)
- try {
- Field field = ReflectionUtils.findField(PlatformDependent.class, "DIRECT_MEMORY_COUNTER");
- field.setAccessible(true);
- directMemory = (AtomicLong) field.get(PlatformDependent.class);
- Field field1 = ReflectionUtils.findField(PlatformDependent.class, "DIRECT_MEMORY_LIMIT");
- field1.setAccessible(true);
- maxDirectMemory = (Long) field1.get(PlatformDependent.class);
- } catch (Exception e) {
- logger.error(e.getMessage());
- }
- TimerTask timerTask = new TimerTask() {
- @Override
- public void run() {
- System.out.println("task run:" + new Date());
- long m = directMemory.get();
- logger.error(BUSINESS_KEY + "maxDirectMemory==={}:{}K", maxDirectMemory / _ik, m / _ik);
- }
- };
- Timer timer = new Timer();
- //安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
- timer.schedule(timerTask, 10, 2000);
- }
- }
|