DirectMemoryReporterImpl.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.tidecloud.dataacceptance.service;
  2. import io.netty.util.internal.PlatformDependent;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.util.ReflectionUtils;
  7. import javax.annotation.PostConstruct;
  8. import java.lang.reflect.Field;
  9. import java.util.Date;
  10. import java.util.Timer;
  11. import java.util.TimerTask;
  12. import java.util.concurrent.atomic.AtomicLong;
  13. /**
  14. * 日志更新
  15. */
  16. @Service
  17. public class DirectMemoryReporterImpl {
  18. private static final int _ik = 1024;
  19. private static final String BUSINESS_KEY = "netty_direct_memory";
  20. private AtomicLong directMemory;
  21. private Long maxDirectMemory;
  22. private static Logger logger = LoggerFactory.getLogger(DirectMemoryReporterImpl.class);
  23. @PostConstruct
  24. public void init() {
  25. // TODO ( 设置netty 参数 复现 OutOfDirectMemoryError 异常 -Dio.netty.maxDirectMemory = 1938)
  26. try {
  27. Field field = ReflectionUtils.findField(PlatformDependent.class, "DIRECT_MEMORY_COUNTER");
  28. field.setAccessible(true);
  29. directMemory = (AtomicLong) field.get(PlatformDependent.class);
  30. Field field1 = ReflectionUtils.findField(PlatformDependent.class, "DIRECT_MEMORY_LIMIT");
  31. field1.setAccessible(true);
  32. maxDirectMemory = (Long) field1.get(PlatformDependent.class);
  33. } catch (Exception e) {
  34. logger.error(e.getMessage());
  35. }
  36. TimerTask timerTask = new TimerTask() {
  37. @Override
  38. public void run() {
  39. System.out.println("task run:" + new Date());
  40. long m = directMemory.get();
  41. logger.error(BUSINESS_KEY + "maxDirectMemory==={}:{}K", maxDirectMemory / _ik, m / _ik);
  42. }
  43. };
  44. Timer timer = new Timer();
  45. //安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里是每3秒执行一次
  46. timer.schedule(timerTask, 10, 2000);
  47. }
  48. }