java关于内存溢出的分析,mat工具

对于我们在现实的场景中,或多或少会遇到内存溢出的问题,可怎么排查这个问题呢?

首先我们需要了解一下关于java中自身安装自带的几个命令:jmap,Jvisualvm,jstack等。一般情况下,对于内存,cpu,线程的监控用Jvisualvm

这个命令我们很清晰的能查看系统的运行情况。

如果我们需要定位内存溢出的代码,就必须用jmap导出此时的对文件,用MAT工具进行查看。我看了很多的博客说eclipse如何集成MAT。

其实,eclipse不用集成MAT,我们去MAT官网下载:点击打开链接下载解压,直接点击里面的MemoryAnalyzer.exe就可以了,添加我们dump的堆文件就可以解析了。对于对文件的dump,我们用jmap命令: 

jmap -dump:format=b,file=C:/dump/dump.bin 7098

//注意这个7089就是我们运行的系统的pid,可以通过jsp进行查看

然后用MemoryAnalyzer打开:

java关于内存溢出的分析,mat工具

红色部分,就是我们要重点看的,通过第二个圈,可以看出内存都累计在数组中,接下来我们看Details:

java关于内存溢出的分析,mat工具

就可以发现是一个集合中在不停的放User对象。