记一次java内存分析

昨天遇到了内存溢出,之前看过java虚拟机,还记得dump和MAT以及大概的定位方法(虽然没用过)。于是,开始。


1. 下载MAT,地址:http://www.eclipse.org/mat/downloads.php

选择自己需要的版本,下载前可以选择比较近的镜像,可以提高下载速度:



2. 下载后解压,结构如下(我的是win64):


3. 设置虚拟机参数为:-Xmx40m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\Java\dump。当出现内存溢出时,会在指定的目录生成dump文件


4. 打开MAT,打开菜单:File -> Open Heap Dump,选择dump文件(右下角的过滤器,需要设置为ALL Files才能看到dump文件)


这里我用的默认选项,点'Finish'



MAT打开dump的过程中会占用大量内存(dump文件都很大,比如我这次的就是4G左右),如果分配的内存不够,那么打开过程可能会失败。这里需要修改MAT的内存。

MAT其实是eclipse的插件,就算独立运行的MAT,根目录下也有一个‘eclipse.exe’文件。所以,修改内存的方式应该和eclipse一样。于是看到了‘MemoryAnalyzer.ini’文件,打开后有一个配置‘-Xmx1024m’,这不是JVM参数吗: ) 。 改大一点,就OK


5. 打开后,MAT会对dump进行分析,这个过程请等待,结束后会生成一个报表。根据报表能看出内存占用前几位的实例。效果图



报表下方根据占用内存大小,依次列出了粗略信息,点击‘detail’链接,可以查看该实例的详细信息



也可以打开‘dominator_tree’查看实例的内存使用情况(单位:byte)



或者点击‘Overview’视图的饼图,选择‘List objects > with outgoing references’,打开的视图中可以看到很多信息,需要耐心分析。



6. 难得的一次线上环境的内存溢出,可以给我学习内存分析。以前虽然看过书,但没实际操作过,总觉得心里没底。总之,开心!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值