@boothsun
2018-03-29T19:52:33.000000Z
字数 783
阅读 1791
JVM
参考优秀博文:
1. 线上FullGC频繁的排查
2. 系统频繁Full gc问题分析及解决办法
3. 记一次通过Memory Analyzer分析内存泄漏的解决过程
频繁Full GC的最常见就是大对象没有释放,或者内存泄漏。比如一个List里放了非常多的对象,
我们知道Full GC的触发条件大致情况有以下几种:
System.gc()
// 建立JVM执行 Full GC,并不一定执行。jmap -histo:live pid
命令 。 // 这个会立即触发Full GC可以先使用jmap
命令打印出当前系统内存镜像,然后使用专业工具比如Eclipse Memory Analyzer或者jvisualvm来对Dump文件进行分析。 常用jmap命令如下:
jmap -histo[:live] <pid>
通过histo选项,打印当前Java堆中各个对象的数量、大小。如果添加了live,只会打印活跃的对象。jmap -dump[:live,]format=b,file=<filename> <pid>
通过-dump选项,把Java堆中的对象dump到本地文件,然后使用MAT进行分析。如果添加了live选项,只会dump活跃的对象。jmap -heap <pid>
通过-heap选项,打印Java堆的配置信息和使用情况,还有使用的GC算法。在集群中的某台机器上开启XX:HeapDumpBeforeFullGC
,让JVM在每次FULL GC前 产生Heap DUMP文件,然后通过文件来对内存情况进行分析。
使用专业的MAT对DUMP文件进行分析: