频繁发生Full GC小议

早上和同事聊了下频繁发生Full GC要怎么处理,记一下吧

什么时候会触发Full GC

  • 老年代空间不够用了
  • System.gc调用
  • 统计新生代对象晋升到老年代的时候,发生要晋升的对象大于老年代的剩余空间
  • 堆中分配大对象,直接分配到老年代,老年代也没有连续的空间存放大对象

方案

  1. 可以先看看GC日志,或者用jstat打印gc信息,可能出现新生代的对象一直没有释放导致的
  2. 使用jmap把内存中的对象dump下来,用mat(eclipse的开源工具)或者jvisualvm(jdk自带的工具)分析
    1. 可能出现jmap导出文件的时候,进程卡死,文件太大,导不出来了,那就只好重启了。
  3. 频繁发生Full GC可能会导致CPU飙高,也可以配合jstack查看里面的线程到底在做什么

参考:Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)

最后

闲聊

你可能感兴趣的:(频繁发生Full GC小议)