1、问题描述:

        使用命令 jstat -gcutil [pid] 查看JVM GC日志,发现生产系统频繁FullGC,大概几分钟一次,而且系统响应速度变慢很多

        再使用 free -g 查看服务器内存全部占用,猜测是内存溢出了

2、导出dump日志

jmap -dump:live,format=b,file=heap.hprof 18051

使用如上命令导出gc日志,其中18051是java线程ID需要自己查询

执行成功后,会在执行命令的文件夹下面生成 heap.hprof 这个文件

3、本地分析日志

打开 Eclipse memory analyzer 解压文件夹

如果dump日志文件很多,需要修改软件配置大小,修改MemoryAnalyzer.ini文件Xmx参数如下

双击运行软件:

 运行上面文件,打开界面后 点击左上角 file -> Open Heap Dump 选择上面的heap.hprof文件

选择文件,进行分析成功后显示如下界面:

点击上图红框进入泄露页面:

 keywords已经显示代码问题大概,点击下面的details查看详情

 打开可以看到是LIst占用了很大空间,也可以查看Thread Stack,如下图所示

 

 4、服务器直接分析日志

        如果日志文件很大的话,下载到本地需要很多的时间,而且打开也可能会报错,这时候我们可以在服务器直接进行分析,操作步骤如下:

1、上传 Eclipse memory analyzer linux版本到linux服务器,并使用unzip 解压上传后文件,解压后如下图所示

2、复制dump文件到相同文件夹,也可以新建文件夹,因为分析完成后,会生成很多分析文件

3、运行命令执行分析,这里注意需要修改analyzer配置文件设置内存空间大于需要分析的日志文件,这里设置30000M

 运行命令:

./ParseHeapDump.sh heap.hprof org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

 分析成功后如下图所示:

 主要文件是途中三个zip文件,下载到本地,解压后打开文件夹里面的.index页面,也会显示分析图,只是没有直接使用软件详细

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: